抽象类和接口的部分小节

来源:互联网 发布:网络英语培训排名 编辑:程序博客网 时间:2024/05/22 09:36

抽象类

1.abstract 关键字可以用来修饰类(抽象类)也可以用来修饰方法(抽象方法)。

2.不可以被实例化,但是有构造函数,构造函数也可以重载。接口没有构造。原因是如果抽象类没有构造,那么子类怎么办?岂不是不能初始化父类资源了?!

3.有抽象方法的类,一定是抽象类,抽象方法和抽象类都必须用abstract修饰。

4.抽象类中可以有抽象方法,也可以有具体的实现方法,若果是“具体”子类继承了该类那么子类中必须重写全部抽象父类的全部抽象方法;如果不是具体子类,
而是一个“抽象”类继承了该抽象类,则不一定就要重写所有的抽象方法了。(想实例化的类必须实现所有抽象方法);子类当然也可重写抽象类中已经实现
的方法。

5.抽象方法不可以被private修饰,因为如果这样子类就无法继承,也就失去了意义。

6.abstract 不能修饰、属性,private方法,final方法,构造函数、静态方法。问题,如果抽象类本身或者里面的方法前面不写public默认是什么?

7.抽象类的应用场景:主要用于父类无法确定全部实现,而由子类提供具体实现的类。

8.抽象类的模板设计模式:把抽象类当成多个子类的通用模板,子类在模板基础上进行改造,但是子类总体上保留了父类的行为方式。
解决的问题是:抽象类中的一些功能确定,一些功能不能确定时候,把不能确定的暴露出去让子类具体情况实现。
扮演模板角色,供给子类发挥实现。

在谈论接口的时候先思考一个问题,为什么Java不支持多继承,只能多层继承呢?接口却可以?(如果可以多继承super构造哪个父类呢?)

接口

1.接口的意义:当必须要从几个类中派生出一个子类,继承他们所有的方法和属性时候这里就要用到接口。(接口虽然没有构造方法,但是子类实现多个接口的时候
默认 extends 了Object)

2.接口从另一个角度讲可以看成抽象类过度过来的,它是一个特殊的抽象类,里面只有常量属性和抽象方法。

3.接口可以继承其他接口的,而且可以多继承。(接口里面没有构造方法,不会歧义)

4.接口里面的成员属性都是默认public static final的,方法默认都是public abstract 的,接口本身interface之前默认也是public的。但是在同一个文件中,一般
不允许有两public申明,除非在内部申明。由此知道,抽象类和接口前面修饰符是public 或者 默认(没有)。

5.接口里面的方法如果是被“具体”类实现,必须实现里面所有的接口。

6.接口和抽象类之间有什么关系呢?抽象类是可以implements接口的,但是不可以继承一个接口,接口除了自身能自我继承外,其他都需要去实现implements。

接口和抽象类,具体类作为形式参数和返回值的问题

1.具体类作为形参和返回值,要求传入一个它的对象,返回它的对象。

2.接口作为形参和返回值,要求传入的是该接口的实现类对象,返回该接口的实现类对象。

3.抽象类作为形参和返回值,要求传入该抽象类子类对象,返回该抽象类的子类对象。

原创粉丝点击