java中的继承、接口

继承主要解决的问题:公共性抽取
父类也可以叫基类、超类。子类也可以叫派生类。
定义子类的格式:
public class 子类名称 extends 父类名称{
//代码块
}

继承中成员变量的访问
在父子类的继承中,若成员变量重名,则创建子类对象时,访问有两种方式:直接通过子类对象访问成员变量(等号左边是谁就优先用谁,没有则向上找);间接通过成员方法访问成员变量(方法属于谁就优先用谁)

局部变量:直接写
本类成员变量:this.成员变量名
super关键字访问父类成员变量:super.num

访问成员方法类似,即:创建的对象是谁,就优先用谁,如果没有就向上找父类。
重写override:在继承关系中,方法的名称一样,参数列表也一样(重载的参数列表不一样)。或者叫方法覆盖。特点是如果创建的是子类对象,则优先用子类方法.重写的注意事项:
1.@Override:写在方法前,用来检测是不是有效的正确覆盖
2.子类方法的返回值必须小于等于父类方法的返回值范围。
3.子类方法的权限必须大于等于父类的权限修饰符。
public>protect>(default)>private
(default)不是关键字,而是表示留空,什么也不写,比如int num

继承中super关键字可把父类方法重复利用,并且子类可添加更多内容

继承中的构造方法的访问特点:
1.子类构造方法中有一个默认隐含的super()调用,所以一定是先调用父类构造,后执行子类构造
2.子类构造可以通过super()调用父类重载的构造方法
3.super调用父类构造,必须是子类构造方法的第一个语句!且不能一个子类构造调用多次super构造
总之,子类默认调用父类构造方法,不写是系统默认,写了则调用所写的super,super只能有一个,且必须是第一个语句。
(只有构造方法才能调用父类构造方法)

super关键字的三种用法:
1.在子类的成员方法中,访问父类成员变量。
2.子类成员方法中访问父类成员方法。
3.子类构造方法调用父类方法。

super关键字用于访问父类内容,而this关键字用于访问本类内容
this三种用法:
1.本类成员方法中访问本类成员变量
2.在本类成员方法中访问另一个成员方法
3.本类的构造方法,访问本类的另一个构造方法(this调用必须是构造方法的第一个且唯一一个语句)
public child(){
this(num:123);
}
super和this不能同时调用
内存中的super与this关键字如图:(图中子类method内容是super.method()调用了父类method,没有标出来)
在这里插入图片描述

java.lang.Object类是所有类的公共最高父类,java语言是单继承的,一个类的直接父类只有一个

抽象方法:加上abstract关键字,没有大括号,直接分号结束
抽象类:抽象方法所在的类必须是抽象类,但抽象类中可以没有抽象方法,在class前写上abstract
1.不能直接创建new抽象类对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写父类中所有抽象方法,即:去除抽象方法的abstract关键字,后补上方法体{}
4.创建子类对象进行使用

java中的接口
接口是一种公共规范标准,在代码中就是类的公共规范。
接口是一种引用数据类型,最重要的是其中的抽象方法。
定义一个接口的格式:
public interface 接口名称{
//接口内容
}
注意:定义类时字节码文件.java---->.class;换成interface之后编译生成的字节码文件仍然是.class。
java7中接口可以包含的内容有:1.常量;2.抽象方法
java8还额外包含有3.默认方法;4.静态方法
java9中还包含5.私有方法

接口当中的抽象方法修饰符必须是两个固定的关键字:public abstract 这两个关键字修饰符可以选择性省略,方法的三要素可以随意定义

接口使用步骤:
1.接口不能直接使用,必须有一个实现类来实现接口。
格式: public class 实现类名称 implements 接口名称{
}
2.接口的实现类必须覆盖重写接口中所有抽象方法。即去掉abstract关键字,加上方法体大括号
3.创建实现类的对象,进行使用
注意:若实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类;

java8开始接口中可以定义默认方法,用于解决接口升级问题
格式: public default 返回值类型 方法名称(参数列表){
方法体}
调用默认方法,如果实现类当中没有,会向上找接口
注意:1.接口默认方法,可以通过接口实现类对象,直接调用
2.接口默认方法也可以被接口实现类进行覆盖重写

java8开始接口当中允许定义静态方法:
格式: public static 返回值类型 方法名称(参数列表){
}
即:将abstract或default换成static,带上方法体
注意:不能通过接口实现类的对象来调用接口当中的静态方法;正确方法是通过接口名称直接调用

抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。但是这个共有方法不应该让实现类使用,应该是私有化的。从java9开始,接口中允许定义私有方法。1.普通私有方法;解决多个默认方法之间重复代码的问题,格式:
private 返回值类型 方法名(参数列表){}
2.静态私有方法;解决多个静态方法之间重复代码的问题
private static 返回值类型 方法名(参数列表){}

接口的常量定义和使用:
接口当中也可以定义成员变量,但必须使用public static final关键字进行修饰,从效果上看,这其实是接口的【常量】
public static final 数据类型 常量名称=数据值;
一旦用final关键字进行修饰,说明不可改变。
1.接口中的常量,可以省略public static final关键字
2.接口中的常量必须进行赋值,不能不赋值
3.接口中常量的名称使用完全大写的字母,用下划线进行分割(一般的命名规则)

使用接口时:1.接口是没有静态代码块或者构造方法的。
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
格式:
public class myinterfaceimpl implments myinterfaceA,myinterfaceB{
//覆盖重写所有抽象方法
}
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
4.如果实现类没有覆盖重写所有接口中所有抽象方法,那么实现类就必须是抽象类
5.如果实现类实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
6.一个类直接父类当中的方法,和接口当中的默认方法产生了冲突,则优先用父类当中的方法

注意:1.类与类之间是单继承的。直接父类只能一个。
2.类与接口之间是多实现的。一个类可以实现多个接口。
3.接口与接口之间是多继承的。
注意:多个接口当中的抽象方法可以重复(最好避免这种写法);多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,且要携带default关键字

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值