Java:继承和多态

继承

继承:对每个类的共性进行抽取,在Java中如果要表示继承的关系,需要借助关键字“extends”。

知识点:
1.可以通过 super 访问子类继承过来父类的成员,super 只能指代当前类的父类,不能指代父类的父类。 

2.当子类继承父类之后,子类需要显示的调用父类的构造方法,要先帮助父类的成员进行初始化。

3.this 访问的是当前对象(方法和属性),super 访问的是父类继承下来的方法和属性。

4.this和super都只能在非静态方法下使用。

5.Java不支持多继承。

6.密封方法:就是final修饰方法,如果一个类不想被其他类继承,此时可以使用final来修饰当前这个类,这个类被叫做密封类。

多态

多态:同一个事件,最后结果不同。

优点:能够降低代码的”圈复杂度“,避免使用大量的if-else。

向上转型(三种方法)

1.直接赋值
2.方法的传参
3.返回值

缺点:只能调用父类自己的方法向上转型:父类引用子类对象

注意事项:通过父类应用,调用子类特有的方法是无法直接调用的

向下转型

父类给到子类(不是所有的向下转型都可以成功)
需要进行强制类型转换(强转有风险)

protected 关键字

在类和对象章节中,为了实现封装特性,Java中引入了访问限定符,主要限定:类或者类中成员能否在类外或者其他包中被访问

重写和重载的区别

注:重载英语是Overload图片上的Override是重写

方法重写规则:
1.静态方法不能被重写
2.如果子类要重写父类的方法,一般必须与父类 方法原型一致,返回值类型,方法名(参数列表)要完全一致
3.被重写的方法返回值类型可以不同,但是必须有父子关系
4.子类的权限要大于等于父类的权限

在面向对象编程中,如果父类提供了一个构造方法,这并不意味着子类必须也需要提供一个构造方法,但仍有例外,比如:
1.子类需要初始化额外的成员变量:如果子类引入了新的成员变量,那么通常需要自己的构造方法来初始化这些变量。
2.子类需要覆盖父类的构造逻辑:如果子类需要在构造过程中执行与父类不同的操作,它可能需要定义自己的构造方法。
3.调用父类的特定构造方法:子类可以通过在自己的构造方法中调用super()来调用父类的构造方法,从而继承或扩展父类的初始化逻辑。

如何实现
在Java中,如果子类没有显式地定义构造方法,编译器会自动为它添加一个无参的默认构造方法,该构造方法会隐式调用父类的无参构造方法。但如果父类没有无参构造方法或者子类需要执行额外的初始化操作,就需要显式地定义构造方法,并且在构造方法的第一行通过super()调用来初始化父类。

// 父类
class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }
}

// 子类
class Dog extends Animal {
    private int age;

    // 子类的构造方法
    public Dog(String name, int age) {
        super(name);  // 调用父类的构造方法
        this.age = age;
    }
}

注:在这个例子中,Dog类需要初始化两个成员变量:从 Animal 继承的 name 和新增的 age 。因此,Dog 类定义了自己的构造方法,并通过 super(name) 调用了父类 Animal 的构造方法来初始化name。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值