【Java基础】面向对象:继承

一、继承

1.1 什么是继承

继承 extends

生活中: 孩子继承父辈的财产(物品),继承后孩子就可以使用

代码中: 子类 继承 父类,子类就可以使用父类的属性和方法

1.2 为什么要继承

有了继承,好处

  • 代码减少重复,提供代码复用性

  • 是多态的前提

1.3 如何写继承

在类声明上,使用extends声明要继承的类,如下

public class A extends B{
​
}

以上,就是继承,读作: A类继承B类,其中A类是子类,B类是父类


特殊的:

  • java的继承是单继承, 即一个类只能继承一个父类

  • 支持层次继承,A类继承B类,B类继承C类,A对象可以调用C对象中的属性和方法

// 父类Animal

public class Animal {
​
    int age;
    String name;
​
    void eat() {
        System.out.println("吃东西");
    }
​
}
// 子类Dog

public class Dog extends Animal{
​
}
// 测试

public class Test {
​
    public static void main(String[] args) {
        Dog dog = new Dog( );// Dog是继承Animal
        
        int age = dog.age;// 调用父类的属性
        System.out.println("age = " + age);
        
        dog.eat();// 调用父类的方法
    }
}

1.4 继承中属性问题

子类可以使用父类的非私有属性,无法使用父类私有的属性

子类中可以定义自己特有的属性,自己对象可以调用

但是,父类对象无法向下使用子类中的属性

1.5 继承中方法问题

子类对象可以调用父类中非私有的方法,私有方法无法调用

子类中可以定义自己特有的方法,自己调用

父类对象是无法向下调用子类中的方法

子类中有与父类一样的方法 ---> 重写!!

1.6 继承中构造方法问题

继承中,创建子类时,

  • 会先创建父类对象,将父类属性初始化

  • 后再创建子类对象


这也解释了,子类对象为什么可以使用父类属性,因为父类对象创建了,属性初始化了,子类才可以直接使用


那么,子类创建对象时,是如何调用父类构造,创建父类对象的呢??

  • 因为在构造方法的第一行有默认隐藏的super()在调用父类构造,创建父类对象

1.7 总结

  • 子类继承父类,使用extends

  • 继承后,子类能使用父类非私有的属性和方法

    • 子类和父类方法有重复---> 重写

  • 继承后,父类不能子类任何东西

  • 继承时,先创建父类对象,再创建子类对象

    • super

二、重写

重写是在继承的时候,子类重写父类的方法.

什么是重写? 就是父类有一个方法,子类又重新定义一个一模一样的方法,叫做重写,又叫覆写(Override)

重写的要求:

  • 子父类重写的方法 访问修饰符一样

    • 特殊的: 子类访问修饰符 >= 父类的

  • 子父类重写的方法 返回值类型一样

  • 子父类重写的方法 方法名一样

  • 子父类重写的方法 参数列表一样

  • 子父类重写的方法 方法体不一样!

为什么子类要重写父类方法?

  • 这些父类中的方法确实是需要的,且是共性的

  • 但是父类执行的效果不理想,不适合子类 . 需要每个子类重写以满足自身的需求(情况)

  • 总结: 父类方法不适合子类,所以子类需要重写!

三、this和super

创建子类对象时,会先创建父类对象,再创建子类对象

为什么? 是因为java语法设计,在构造方法第一行默认隐藏有个super() 调用父类的无参构造

super是什么? super是代表父类对象

super能干什么?

  • 作用1: super(),调用父类无参构造 ; super(参数)调用父类有参数的构造方法

  • 作用2: super代表父类对象,调用父类的属性和方法

    • super.属性

    • super.方法()

this和super

thissuper
是什么代表当前类对象代表父类对象
属性this.属性; (调用当前类属性, 如果自己没有也可以调用父类的属性)supe.属性;只能调用父类属性
方法this.方法(); (调用当前类方法, 如果自己没有方法也可以调用父类的方法)super.方法();只能调用父类方法
构造方法this(); 调用自己的无参构造 this(参数); 调用的是自己的有参构造super();调用父类无参构造 super(参数);调用父类有参构造

四、有父类时对象创建的过程

有父类时对象创建的过程,

  • 先创建父类对象

  • 在创建子类对象

  • 在每个类创建对象时都先属性初始化再执行构造

五、访问修饰符

访问修饰符,又叫访问限制符,控制符

访问就是调用

修饰符/限制符/控制符 , 即控制能否调用


访问修饰符,主要是用来修饰

  • 方法

  • 属性


哪些修饰符

  • public

  • protected

  • 缺省/默认

  • private

当前类同包下其他类中不同包的子类不同包非子类
public
protected父类不能调用,子类可以调用×
缺省××
private×××

访问权限范围从大到小:public > protected > 缺省 > private


一般情况下,实战中最常见是public和private

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值