Java 继承,组合,接口知识深化

目录

 引用变量的强制类型转换

 何时使用继承

程序的复用

1.继承

2.组合

组合实现程序复用

抽象类抽象方法

接口

定义接口

接口的继承

使用接口

实现接口语法

接口和抽象类

相同点

不同点


 引用变量的强制类型转换

  1. 只能在具有继承关系的2个类型之间进行
  2. 如果试图把一个父类实例转换成子类类型,则该变量必须编译时类型是父类类型,运行时类型是子类类型(否则引发ClassCastException异常)
  3. 把子类对象赋给父类引用变量总是行得通的

 何时使用继承

  • 子类需要增加额外的变量
  • 子类需要增加自己独有的行为方式

程序的复用

1.继承

继承是直接在子类中使用从父类中继承得到的方法

2.组合

组合是把需要复用的方法所在的类作为新类的成员变量组合进来用户看到的是新类的方法,而不能看到被组合的旧类对象

组合实现程序复用

首先在需要复用程序的类里面创建一个private修饰的被复用的类的对象

然后在需要复用程序的类里面定义构造器,以创建的对象作为参数(如 public Dog(Animal a))

再然后就定义复用的方法,直接调用被复用的类的对象即可

最后在main方法中使用的时候,先创建被复用的类的对象,再创建需要复用的类的对象并且前面写构造器时指定了需要一个被复用程序的类的对象作为参数。

再调用这个对象的方法就行了

抽象类抽象方法

抽象类和抽象方法必须使用abstract修饰符来修饰

抽象方法不能有方法体

抽象类不能有实例化

抽象方法:public abstract void test () 

普通方法:public void test() {}

抽象方法没有花括号,在数据类型前要加abstract修饰

抽象方法就是用来被继承的,在子类中重写其方法

创建对象时:  抽象类名  变量名  =  new 子类名

然后就能直接使用p来调用被重写后的方法

接口

接口可以看成一个特殊的抽象类,一个源文件里只能有一个public修饰的接口

定义接口

修饰符 interface 接口名

修饰符 interface 接口名 extends 父接口1 , 父接口2,父接口3

一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类

接口里的成员变量只能是静态常量

接口里的方法只能是 抽象方法,类方法,默认方法,私有方法

在接口中定义成员变量时,不管是否使用public static final修饰符,接口里的成员变量总是隐式使用这三个修饰符来修饰。接口里没有构造器和初始化块,因此接口里定义的成员变量只能在定义时指定默认值

所以下面2行代码是完全一样的

int a = 50;
Public static final int a  50;

由于接口中所有成员变量都是用public static final修饰的,所以可以在处于另外一个包下的类中调用该接口中的变量             包名.接口名.变量名

并且不能改变它的值,因为有final修饰

接口的继承

接口完全可以支持多继承,一个接口可以有多个父接口

子接口会获得父接口的所有抽象方法,常量。

下面是接口多继承代码

使用接口

接口的主要用途就是告诉实现类我这个方法是干嘛的,你去给我实现

一个类可以实现一个或多个接口

实现接口语法

实现接口可以看成是一种特殊的继承

修饰符 class 类名 extends 父类 implements 接口1,接口2...

{

}

修饰符 class 类名 implements 接口1,接口2

{

}

可以看到既要有父类,也要有接口

实现接口时,子类也会获得所实现接口里定义的成员变量和方法(抽象方法和默认方法)

一个类实现接口时,这个类必须完全实现这些接口里定义的全部抽象方法(也就是重写这些抽象方法)

一个类实现接口时,方法都要是public修饰,因为子类重写父类方法时,访问权限只能大于父类或者等于父类,而接口里的方法都是public修饰,所有实现类只能用public修饰

接口和抽象类

相同点

  • 接口和抽象类都不能被实例化
  • 接口和抽象类都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必须实现这些抽象方法。

不同点

  • 接口里只能包含抽象方法,静态方法,默认方法和私有方法,不能为普通方法提供方法实现,抽象类可以有普通方法
  • 接口里只有静态常量,没有普通成员变量;抽象类都可以有
  • 接口不含构造器,抽象类可以包含构造器,但不是用来创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作
  • 接口里不含初始化块,抽象类里可以包含初始化块 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值