day

day,第1张

day

继承:extends

  • 减少代码的冗余
  • 提高复用性 便于扩展
  • 为多态性提供前提

结构:
class A extends B{}
A:子类
B:父类 、基类 、 超类
声明后:A获得B的所有(包含私有)属性 方法
一个子类只能有一个父类,但一个父类可以被多个子类继承

Object类:java中所有类都直接或间接继承了Object类

overrides:
对父类中的同名,同参数列表方法:重写

idea中的overrides标记
方法的重载与重写:
重载:同名 参数列表不同 在编译期就确定了
重写:

  • 同名
  • 同参数列表
  • 重写的方法权限不小于被重写方法的权限修饰符(权限只能放大)
  • prviate 的方法不能被重写(报错)

返回值类型

父类(被重写)子类(重写)voidvoid基本数据类型相同的数据类型A类A类或A类的子类

super关键字:

  • 理解为:父类的 类比(this)
    当子类定义了与父类同名的属性、方法时:
    采用"super.属性"、“super.方法”、"super.构造器"调用父类中对应的属性方法构造器

super(形参列表):表示调用父类指定的构造器
在子类的构造器首行没有显式定义super()或者this()则默认使用super()

子类构造器一定直接或间接调用父类的构造器,虽然创建子类对象时调用了父类的构造器,但是仅仅创建了一个对象即new的对象。
创建子类对象后获取全部父类的方法,并且在堆空间中加载了所有父类的属性,但父类并没有生成对象。

多态性:
例如:
父类: Persong
子类:Man 、 Woman
一般的:

Man man = new Wan();
Woman woman = new Woman()

多态性:父类的引用指向子类的对象

Person man = new Man()

此时调用man的方法时,执行的是子类重写父类的方法(虚拟方法调用)。但是不能再调用men本身特有的方法,只能调用父类Person有的方法。
即编译时看Person有没有对应方法,运行时调用的是子类重写的方法。
编译看左边,运行看右边
多态性使用的前提:

  • 存在继承关系
  • 存在方法的重写
    方法可以重写,但属性 为父类的属性。
public class animalTest {
    public static void main(String[] args) {
        animal animals = new animal();
        doit(new dog());
        doit(new cat());

    }

    public static void  doit(animal animals){
        animals.eat();
        animals.shout();
    }
    
}

定义时看不出会执行什么函数,只有在运行时才能确定具体运行哪一个重写。

向下转型:
a instanceof A:对象a是否为类A的实例。
对于类的转换存在转换失败的情况,因此采用instanceof进行判定

Man p1 = new Men
Women p2 = (Women)p1//通过强制类型转换 将men转换为women

为了在向下转型的过程出现ClassCastException的异常,在向下转型前采用instanceof进行判定,若返回true则进行向下转型,否则不进行转型
若 a instanceof A 返回true则
将A替换为A的任意父类 仍然返回true

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存