一、今日学习内容:
上周的继承与多态的知识还有一部分需要了解学习的一些地方:
1、抽象类和抽象方法
有abstract修饰的类称为“抽象类”,它只定义了什么方法应该存在,不能创建对象,必须派生出一个子类,并在子类中实现其未实现的方法之后,才能使用new关键字创建对象。
在方法前加上abstract就形成抽象方法,只有方法声明,没有实现代码
abstract class Person { public abstract String getDescription(); }
一个抽象类中可以包含非抽象方法和成员变量。包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法
2、抽象类的三种类型:
(1)直接定义了一个抽象方法
(2)继承了一个抽象父类,但没有完全实现父类包含的抽象方法
(3)实现了一个接口,但没有完全实现此接口所包容的抽象方法。
3、从抽象类继承:
从抽象类继承的子类必须实现父类的所有抽象方法,否则,它仍然是抽象类
class Employee extends Person { public String getDescription() { //Do Something... return ""; } }
抽象类不能创建对象,一般用它来引用子类对象。
实例:
Person p; p=new Employee();
以下模式总是成立的: 抽象类 抽象类变量 = new 派生自抽象类的具体子类();
4、Java中接口的语法特性
(1)定义一个接口,采用关键字interface,实现一个接口,采用关键字implements
(2)接口的成员函数自动成为public的,数据成员自动成为 static和final的。
(3)如果接口不声明为public的,则自动变为package。
(4)一个类可以同时实现多个接口。
5、接口的使用:
IFood f = new Duck();
接口类型 接口类型的变量=new 实现了接口的具体类型();
6、接口:
可以通过继承接口来扩充已有接口,并形成一个新的接口。
interface OneInterface { void f1(); } interface TwoInterface extends OneInterface { void f2(); }
实现子接口的类,必须实现“父”“子”接口所定义的所有方法,才能被实例化(即new出一个对象)。
7、利用接口定义常量:
public interface ArrayBound { public static final int LOWBOUND=1; public static final int UPBOUND=100; }
只要一个类声明实现了这个接口,就可以直接使用这些常量名
在实际开发中,这种编程方式非常常见。
注意:定义在接口中的常量必须被初始化。
8、接口与抽象类的区别:
(1)抽象类是一个不完全的类,而接口只是表明类应该具有哪些“外部”特征,不涉及任何实现细节。
(2)接口基本上不具备继承的任何具体特点,它仅仅承诺了外界能够调用的方法。
(3)一个类一次可以实现若干个接口,但一个类只能继承一个父类。
二、遇到的问题:
今天没有遇到什么问题;
三、明日学习计划:
明天学习异常处理的部分操作。