Java 面向对象之继承篇详解原理与特点

目录
  • 一、前言
  • 二、继承
    • 什么是继承呢?
    • 继承的好处与弊端
    • 继承的使用场景?
      • 继承的格式:
    • 继承的特点:
    • 重写的概念:
    • super关键字
    • super和this的比较

一、前言

前面我也们讲述了相关封装的,现在我们先认识的继承的概念和使用。

二、继承

什么是继承呢?

继承在显示生活中也不少见,比如继承财产之类的,在我们java学习中也有类似的使用,

继承者称作子类也叫派生类,被继承者称作父类、基类或超类,objec类是所有类的父类

(后期介绍)

继承的好处与弊端

好处:就是提高了代码的维护性(多个代码需要修改,只需要修该一处即可)。

提高了代码的复用性(多个相同的成员可以方法到同一个类中)

弊端:继承的缺点就是使代码之间的耦合度高,修改父类子类也会跟着变化

继承的使用场景?

两个有从属关系的,比如猫和动物,学生和人等。

继承的关键词是extends。

继承的格式:

public class 子类名 extends 父类名{}

举例:

public class Cat extends Animal{}//猫继承动物类

继承的特点:

子类可以拥有父类的非私有方法和成员变量,也可以重写父类的非私有(private修饰的)方法。所有子类的方法都默认访问父类的无参构造

重写的概念:

重写是子类重述父类中的非私有方法,重写的一般特点是方法名相同,格式相同,返回类型相同、方法体不同

如:

fu类中:

public class fu{
  public void  play(){
   System.out.println("fu喜欢打羽毛球");
  }
}

zi类中:

public class  zi extends fu{
    public void play(){//对父类的方法重写
   System.out.println("zi喜欢打篮球");
    }
} 

还可以这么写,访问权限需要zi类大于等于fu类

fu类中修饰是默认:

public class fu{
   void eat(){
   System.out.println("fu中eat方法");
  }
}

zi类中:


public class Zi extends Fu {
    @Override//检测方法重写的正确性
   public void eat() {
        System.out.println("zi中的eat方法");
    }
}

zi类中重写:


public class Zi extends Fu {
   // @Override写不写不会影响,这个只是起到辅助作用
   void eat() {
        System.out.println("zi中的eat方法");
    }
}

zi还可以:


public class Zi extends Fu {
    @Override
  protected  void eat() {
        System.out.println("zi中的eat方法");
    }
}

修饰访问关系:public>protected>默认(不写)>private

当父类的权限修饰符是默认(也就是不写修饰符),子类重写的修饰方法可以是默认和

默认之前的以此类推。注:当父类的权限修饰符是private时,那子类可不是private

之前的。当父类被private修饰时,子类不能重写此类方法。

super关键字

当子类中的成员变量和父类中成员变量同名时,我们想使用父类中的成员变量时,

或者我们重写了父类中方法时,我们还想调用父类中的方法时。此时我们就要使用super

关键字来调用父类中的成员。

super和this的比较

super和this的使用原理差不多,this是解决了局部变量和成员变量同名时,局部变量对

成员的覆盖super是解决子类对父类的覆盖。

当局部变量,成员变量,父类中的变量同名时,访问的是局部变量。可以用this和super改变。


public class fu{
  public int age=40;
public fu(){}//无参构造
public fu(int age){//带参构造
  this.age=age;}
  public void eat(){
   System.out.println("fu中eat方法");
  }
}

public class Zi extends Fu {
  public  int age=18;
public Zi(){}
public Zi(int age){
  this.age=age;}
    public void eat() {
      super.eat();
        System.out.println("zi中的eat方法");
    }
public void show(){
  int age=1;
  System.out.println(age);//1局部变量的值
  System.out.println(this.age);//18子类成员中的值
  System.out.println(super.age);//40父类中的值
}

public class Demo{
  public static void main(String[] args){
    zi z=new zi();
     z.eat();
     z.show();
  }

}

下篇我们继续!!

到此这篇关于Java 面向对象之继承篇详解原理与特点的文章就介绍到这了,更多相关Java 继承内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 基础语法之解析 Java 的包和继承

    目录 一.包 1. 概念 2. 使用方式 3. 静态导入 4. 创建包 5. 包的访问权限 6. 常见的系统包 二.继承 1. 概念 2. 语法规则(含 super 使用) 3. protected 关键字 4. 更复杂的继承关系 5. final 关键字 三.组合 四.总结(含谜底) 一.包 1. 概念 根据定义:包是组织类的一种方式 那么为什么要组织类呢? 简单来讲就是保证类的唯一性,就比如在以后的工作中,如果大家一起开发一个项目,大家可能在自己的代码中都写到了一个 Test 类,而如果出现

  • Java面向对象关键字extends继承的深入讲解

    目录 一. 问题引出 二.继承extends 2.1 继承的用法 2.2 基本语法 2.3继承的好处 2.4继承性 总结 一. 问题引出 面向对象的编程思想使得代码中创建的类更加具体,他们都有各自的属性,方法.有的时候一些客观事物之前存在一些联系,那么他们在代码中的具体类也存在一些联系. 例如:设计一个动物类 public class Animal { public String name; public int age; public Animal(String name) { this.na

  • Java语言之包和继承详解

    目录 一.包 包名 类的导入与静态导入 在包中添加类 包访问权限 二.继承 类.超类与子类 重写方法(override) this与super的区别: 子类构造器 protected关键字 阻止继承:final关键字 组合 总结 一.包 包名 在讲包名前,我们先来了解一下,包是用来干什么的? Java中允许使用包(package),包将类组织在一个集合中.借助包可以方便管理组织自己的代码,并将自己的代码与别人的提供的代码库分开管理. 包是组织类的一种方式.使用包的主要目的就是保证类的唯一性. 在

  • Java中的重要核心知识点之继承详解

    目录 一.继承 1.概念 2.语法 3.父类成员的访问 (1)子类中访问父类成员变量 (2)子类中访问父类成员方法 4.super关键字 5.子类构造方法 6.super和this 7.代码块执行顺序 8.父类成员在子类中的可见性 9.继承方式 10.final关键字 11.组合 一.继承 1.概念 继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加新功能,这样产生新的类,称派生类.继承呈现了面向对象程序设计的

  • 一篇文章带你了解JAVA面对对象之继承与修饰符

    目录 Java面向对象之继承与修饰符 继承 1.含义 2.实现 3.好处 4.短处 5.成员变量的访问特点 7.继承中结构方法的访问特点 8.方法重写 9.java继承的注意事项 修饰符 1.package 2.import 3.权限修饰符 4.final 5.ianl修饰基本数据类型变量 6.final修饰引用数据类型变量 7.static 8.static访问的特点 总结 Java面向对象之继承与修饰符 继承 1.含义 继承是面向对象三大特征之一,能使子类具有父类的属性和方法,还可以在子类中

  • 一篇文章带你了解java接口与继承

    目录 JAVA接口的概念 接口的代码实现 定义关键字:interface 实现 关键字: implements 举个列子 注意事项 Java继承 什么是继承: 总结 JAVA接口的概念 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的理解:在类中,方法是具体的,通过接口我们可以将具体的方法抽象化.比如在动物类中有吃的动作,不同的动物吃不同的食物,食肉食草等

  • 一篇文章带你入门Java继承

    目录 Java中继承 什么是继承: 为什么要用继承: 学习总结: 继承关键字:extends 总结 Java中继承 什么是继承: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 为什么要用继承: 可以去掉重复代码,方便后期维护 举个列子,大家应该都玩过英雄联盟,每个英雄都是一个类,如果说不用继承的话每次都要重复定义每个英雄的成员属性,如下图我举了一个MF,一个EZ的列子 public class MissFortu

  • Java 面向对象之继承篇详解原理与特点

    目录 一.前言 二.继承 什么是继承呢? 继承的好处与弊端 继承的使用场景? 继承的格式: 继承的特点: 重写的概念: super关键字 super和this的比较 一.前言 前面我也们讲述了相关封装的,现在我们先认识的继承的概念和使用. 二.继承 什么是继承呢? 继承在显示生活中也不少见,比如继承财产之类的,在我们java学习中也有类似的使用, 继承者称作子类也叫派生类,被继承者称作父类.基类或超类,objec类是所有类的父类 (后期介绍) 继承的好处与弊端 好处:就是提高了代码的维护性(多个

  • Java类的继承实例详解(动力节点Java学院整理)

    一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的). 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于  char.short.byte.int.long.float.double等基本数据类型的

  • Python面向对象之继承代码详解

    本文研究的主要是Python面向对象之继承的相关内容,具体如下. Python 继承 即一个派生类(derived class)继承基类(bass class)字段和方法.继承也允许把一个派生类的对象作为一个基类对象对待.例如,有这样一个设计,一个Cat类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例如,Cat是一个Animal). 继承实现了代码的重用. 继承的基本语法: class 派生类名(基类名1 [, 基类名2....]): 基类名写在括号里,基本类是在

  • Java 数据结构线性表之顺序存储详解原理

    目录 线性表的定义 线性表的基本运算 线性表的存储之顺序存储 定义线性表 添加元素 查找元素 删除元素 打印线性表 实现的完整代码 测试一下 线性表的定义 线性表的逻辑特征: ①有且仅有一个称为开始元素的a1,她没有前趋,仅有一个后继结点a2: ②有且仅有一个称为终端元素的an,他没有后继,只有一个直接前驱a(n-1): ③其余元素ai(2≤i≤n-1)称为内部元素,他们都有且仅有一个直接前驱a(i-1)和直接后继a(i+1). 线性表的图像表示 线性表的基本运算 线性表初始化 求表长 按索引值

  • Java web基础学习之开发环境篇(详解)

    Tomcat + Eclipse添加Java EE插件 因为之前进行Java SE学习已经配置了JDK,安装了Eclipse for Java SE,所以选择了在Eclipse上添加插件的方式来配置Web开发环境 Tomcat是免安装版,直接解压即可: Eclipse中"帮助-安装新软件",work with处选择Mars - http://download.eclipse.org/releases/mars(注意对应自己版本): 选择Web.Java EE那个选项进行安装即可,如果报

  • Java对象Serializable接口实现详解

    这篇文章主要介绍了Java对象Serializable接口实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 导读 最近这段时间一直在忙着编写Java业务代码,麻木地搬着Ctrl-C.Ctrl-V的砖,在不知道重复了多少次定义Java实体对象时"implements Serializable"的C/V大法后,脑海中突然冒出一个思维(A):问了自己一句"Java实体对象为什么一定要实现Serializable接口呢?&qu

  • Java编程复用类代码详解

    本文研究的主要是Java编程中的复用类,那么到底复用类是什么东西,又有什么用法,下面具体介绍. 看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whateve

  • Java源码解析之详解ImmutableMap

    一.案例场景 遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样-- public static final Map<String,String> dayMap= new HashMap<>(); static { dayMap.put("Monday","今天上英语课"); dayMap.put("Tuesday","今天上语文课"); dayMap.p

  • Java并发编程之ThreadLocal详解

    目录 一.什么是ThreadLocal? 二.ThreadLocal的使用场景 三.如何使用ThreadLocal 四.数据库连接时的使用 五.ThreadLocal工作原理 六.小结 七.注意点 一.什么是ThreadLocal? ThreadLocal叫做线程本地变量,ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的.ThreadLocal为变量在每个线程中都创建了一个副本,则每个线程都可以访问自己内部的副本变量. 二.ThreadLocal的使用场景 1.当对象

  • Java源码解析之详解ReentrantLock

    ReentrantLock ReentrantLock是一种可重入的互斥锁,它的行为和作用与关键字synchronized有些类似,在并发场景下可以让多个线程按照一定的顺序访问同一资源.相比synchronized,ReentrantLock多了可扩展的能力,比如我们可以创建一个名为MyReentrantLock的类继承ReentrantLock,并重写部分方法使其更加高效. 当一个线程调用ReentrantLock.lock()方法时,如果ReentrantLock没有被其他线程持有,且不存在

随机推荐