数据抽象

继承

变量访问

父子类成员变量名冲突问题,如果重名,变量看左边,方法看右边
访问规则:本类成员用this,父类用super

直接访问

调用谁就用谁,没有再向父类找

间接访问

调用谁的方法就用谁,若是用父类的方法,则访问父类的,若是子类则用子类的变量。没有再向上找

方法重写 override

  1. 参数列表要一样
  2. 权限修饰符必须大于或等于父类的权限修饰符
    权限修饰符大小为:
    public > protect > (default) > private
  3. 返回值必须是父类的方法的返回值类型或者是该返回值类型的子类

对于已经投入了使用的类,尽量不要修改它,而是利用子类进行继承修改

构造方法

  1. 子类必须调用父类的构造方法,不写也有super()
  2. 调用父类的构造方法的语句必须在第一个语句调用且只能调用一次

super. 与this. 的对比

  1. super.可访问
  • 父类成员变量
  • 父类成员方法
  • 父类构造函数
    2.this.可访问
  • 本类成员变量
  • 本类成员方法
  • 在本类构造方法中访问另一个本类的构造方法(与调用父类的构造方法一样,也必须第一个语句调用,并且不能与super()共存)

抽象类

抽象方法

由于子类对该方法的定义各有不同,而没办法在父类中进行定义的方法,用abstract进行修饰,且必须在抽象类之中。

构造规则

因为抽象类不能用new关键字进行创建,因此必须被继承,并且继承的子类必须要覆写所有的抽象方法,也可以不全部覆写,此时这个子类要被定义为抽象类(因为抽象方法必须放在抽象类之中)
抽象类不一定要有抽象方法

接口

接口实际是一系列的公共的规范标准(方法),可以被多个类实现,并且一个类也可以实现多个接口,字节码文件仍然是.class

使用方法

用一个类对之进行实现implement,并且与抽象类一样,要new的话必须实现所有的抽象方法,或者定义为抽象类

变量

必须用public static final进行修饰,就算不写,在编译时也会被加上。实际上就是不可改变的静态值(符合公共规则的要求),因此起变量名的时候用大写字母加下划线的格式。

抽象方法

必须用public abstract进行修饰,不写也会自动加上。

默认方法

从JDK 1.8开始加入的新特性,用default修饰符进行修饰,具有方法体,为了解决接口升级的问题而加入。
如果一个接口的很多个实现类已经投入了使用,贸然的添加方法或其他特性可能会对类造成影响(使得所有的类必须对新添加的方法进行实现),因此引入默认的方法,如果不想实现可以使用,自己也可以进行覆写,大大增加了灵活性。

静态方法

必须用public static进行修饰,调用时必须用接口名称进行调用

私有方法

从JDK1.9 开始,允许接口中定义私有方法。其作用是在定义默认或者静态方法时解决代码重用问题。

注意事项

  1. 接口中没有静态代码块
  2. 没有构造方法
  3. 一个类可以实现多个接口,如果多个接口中:
    1. 抽象方法重名,只覆写一个抽象方法就行
    2. 默认的方法如果重名的话必须重写
    3. 如果一个类既继承了父类也继承了接口,并且父类中的某方法和接口中的某默认方法重名,就优先用父类的方法(继承优先于接口)

多态

父类引用指向子类对象,变量看左边,方法看右边。

好处

左边可以不变,无论右边是谁,都可以看作左边的对象进行使用

转型

向上转型

即将右侧的子类看作父类

向下转型

将用父类引用指向的对象,用回子类本身的引用进行指向,以此引用更多的方法
利用(obj instanceof class)进行类型判断之后在进行强制转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值