面向对象三大特征之二:继承

本文深入解析Java继承的概念,探讨其特性如单根性、传递性,介绍关键字super的用途,包括访问父类构造方法、调用非私有属性及方法。同时,文章详细解释了子类如何继承父类资源,讨论了方法重写的规则与实践。

Q:为什么使用继承?

     为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中,这个公共的类称为父类(super class)。继承于父类的类称为子类(sub class)

一,java继承的特性

[1] 单根性。在java中,一个类只能有一个直接父类。

[2] 传递性。C继承于B,B继承于A,C具有A的特性和行为

类B继承于类A,那么类B就拥有了类A中非私有的属性和方法(也可理解成B继承了A中所有的属性和方法,只不过私有的属性和方法B无法访问而已)

继承用:B extends A

//类A:
public class Person{
    String name;
    int age;
    
    public void showInfo(){
        System.out.println("姓名:"+name);
        System.out.println(",年龄:"+age);
    }
}
//类B:
public class Student extends Person{
    
}
public class Test01{
    public static void main(String[] args){
        Student s = new Student();
        s.name = "张三";
        s.age = 20;
        s.showInfo();
    }
}

 

二,关键字:super

表示父类对象,没有引用作用

[1] super访问父类构造方法

public Dog(String name,int health,int love,String strain){
        super(name,health,love);//必须写在构造方法的第一句
        this.setStrain(strain);    
    }

[2]  super调用父类的非私有属性

    super可以访问父类的非私有属性,不能访问私有属性(也就是用private修饰过的属性)

     如果要访问父类属性,那么用  super.属性   ;如果要访问子类属性则用     this.属性

     (不管要访问的属性是不是同一个)

[3] super调用父类非私有方法

    也和调用属性一样 使用   super.方法

三,子类继承父类的资源

四,访问修饰符

java中存在4类访问修饰符,分别是private、默认、protected、public。

 

修饰符

本类✘

同包子类

同包其他类

不同包子类

不同包其他类

private

默认

protected

public

 **

private:私有的,只能在本类可以访问。

friendly:默认的,同包可访问,也称包访问权限。

protected:受保护的, ①子类可访问 ②同包可访问

public:公共的,都可以访问

五,继承关系的初始化顺序

继承关系的初始化内存图

(该图用于自己理解的,一般人看不懂)

六,方法的重写

当子类从父类继承过来的方法不能满足自身需要时,子类可以根据自身情况进行方法重写(overwrite/override)

方法重写建立在继承的基础上,没有继承,就没有重写!

 

子类根据自身情况,可以选择部分重写和完全重写

部分重写:

public void showInfo(){
        super.showInfo();
        System.out.println("我是一只"+this.getStrain());
    }

完全重写:

public void showInfo(){
        System.out.println("--"+super.getName()+"--");
        System.out.println("健康值:"+super.getHealth());
        System.out.println("亲密度:"+super.getLove());
        System.out.println("品种:"+this.getStrain());
    }

重写的规则:

[1]方法名称相同

[2]参数列表相同

[3]子类的访问权限一定 >= 父类访问权限

[4]返回值和父类相同或者是其子类

 

public Pet create(){
        Pet pet = new Pet();
        return pet;
}
public Dog create(){
        Dog dog = new Dog();
        return dog;
}

 

转载于:https://www.cnblogs.com/zhangxiong-tianxiadiyi/p/10752714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值