JAVA---多态、抽象类、接口

多态

调用特点 

方法形参为类,则可以传递其与其所有子类

调用成员:

 

 子类会继承父类成员变量;

若子类对成员方法进行了重写,则会把父类方法覆盖。

优缺点

不能调用子类的特有方法,必须父子都有才能调用。为了调用子类的特有方法,可以:

类型转换

向上转换(自动)

父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();

向下转换(强制)

子类类型 变量名 = (子类类型) 父类变量名;
如:Aniaml a = new Cat();
Cat c =(Cat) a;

父子之间可以转换,但子和子之间不可以!

为了简化选择,并且实现在子之间选择,提出了:

instanceof关键字

public class Test {
    public static void main(String[] args) {
    // 向上转型
    Animal a = new Cat();
    a.eat(); // 调用的是 Cat 的 eat
    // 向下转型
    if (a instanceof Cat){
        Cat c = (Cat)a;
        c.catchMouse(); // 调用的是 Cat 的
        catchMouse
        } 
    else if (a instanceof Dog){
        Dog d = (Dog)a;
        d.watchHouse(); // 调用的是 Dog 的
        watchHouse
        }
    }
}

JDK14简化后:

//新特性
//先判断a是否为Dog类型,如果是,则强转成Dog类型,转换之后变量名为d
//如果不是,则不强转,结果直接是false
if(a instanceof Dog d){
    d.lookHome();
    }
    else if(a instanceof Cat c){
    c.catchMouse();
    }
    else{
    System.out.println("没有这个类型,无法转换");
    }

包名命名规范:

路径名.路径名.xxx.xxx
// 例如:com.itheima.oa

使用不同包下的相同类:

//使用全类名的形式即可。
//全类名:包名 + 类名
//拷贝全类名的快捷键:选中类名crtl + shift + alt + c 或者用鼠标点
copy,再点击copy Reference
com.itheima.homework.demo1.Student s1 = new
com.itheima.homework.demo1.Student();
com.itheima.homework.demo2.Student s2 = new
com.itheima.homework.demo2.Student();

final关键字

final class 类名 {
}

final修饰的类不能被继承、重写。

①基本类型的局部变量,被ænal修饰后,只能赋值一次,不能再更改。

②显示初始化(在定义成员变量的时候立马赋值)


抽象类

写法:abstract写在public后面

没有方法体的方法是抽象方法!

p.s.抽象类不能创建对象,如果要创建则要重写所有抽象方法。也就是父类为抽象类,而写一些方法还不确定,所以在非抽象子类中重写后,再创建子类的对象。

抽象类的细节

1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其 非抽象子类的对象。 

2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。

5. 抽象类存在的意义是为了被子类继承。

理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。


接口(功能类)

新建接口的时候选择Interface,不是class!
interface 接口名称{
// 抽象方法
}

正常在多态中,传递参数只要传递一条线的亲属关系,都可以由子类继承。但由于其他线上的人也想继承该类,但不能作为参数进来,所以引出接口。

抽象类是事物,接口是行为。

注意:接口不能创建对象!!!!

接口可以多实现!

接口中的成员特点

 接口和类之间的关系

多个接口中有重名的方法,重写一次就行了。

接口和接口之间的关系

继承关系:可以单继承,可以多继承。

注意:如果实现了最下面的子接口,则要重写所有的抽象方法。(重写方法,重写的时候并不是抽象方法)

新版本JDK的其他功能

适配器设计

由于刚才我们调用子类时需要重写所有的抽象方法,太麻烦,于是有了适配器模式。 

在适配器InterAdapter.class中,方法体全空着(空实现);且适配器写成抽象类最好,因为其内部为空实现,不需要创建对象,所以写上abstract。

test里面直接extends InterAdapter,重写需要的方法体就可以了。

总结

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

参宿七625

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值