Java学习日志——《Head First Java》 Day 7 8月20日
接口与多态
抽象
抽象类
- 对于一些指向不明的类,对其进行初始化往往会出现逻辑上的错误,为了防止出现这种错误,可以在创建类时,将该类标记为“抽象的”,即“abstract”。
- 被标记为抽象的类只能够在被继承时初始化它的子类,可以理解为:被标记为抽象的类,存在的意义即为被子类继承。(抽象类除了被继承之外,是没有用途、没有值、没有目的的)
abstract public class Class{
//内容
}
public class Class_son{
//内容
}
- 此时的Class类将无法被初始化,即无法被new出来,但仍可以创建,并且可以赋予子类对象给父类。
public class Driver{
Class A;
A = new Class_son();
//如上两句都可以通过编译
A = new Class();
//该语句不可通过编译,因为Class被标记为抽象
}
抽象的方法
- 除了类之外,也可以将方法标记为abstract的。
- 抽象的类代表此类必须要被extend过,而抽象的方法代表此方法一定要被覆盖过。
- 抽象的方法没有实体,方法一旦被标记为抽象,则没有具体的方法体:
public abstract void Method();//没有内容、没有方法体
- 如果你声明出了一个抽象的方法,就必须要将该类也标记为抽象的。不能够在非抽象类中拥有抽象的方法。
- 必须实现所有抽象的方法。
实现的方法:以相同的方法鉴名(名称与参数)和相同的返回类型创建出非抽象的方法。
Object类
在Java中的所有类都是从Object这个类继承出来的。
常见用法
1.判断两对象是否相等(包括类与值):obj.equals()
2.获得对象初始化时的类:obj.getClass()
3.获得类的名称和一串数字:obj.toString()
其它
- Object这个类不是一个抽象类
- 使用Object类型的多态引用会出现很多问题,例如:从`ArrayList中调取的所有对象均为Object类型,无法实现其子类的方法。
- 对于上述问题可以通过强制类型转换将对象类型改变。
如果不能确定它是否是某一类型,可以使用instanceof这个运算符来检查,方法如下:
if (obj instanceof Class_obj){
Class_obj A = (Class_obj) obj;
}
接口(interface)
接口的定义与实现
定义(interface)
public interface Pet{...}
实现(implements)
public class Dog extends Animal implements Pet{...}
接口的方法一定是抽象的
- 接口的方法一定是抽象的,但在接口中创建方法可以不用加abstract,语法同抽象的方法相同。
- 接口的方法默认有public和abstract两种属性。
- 如第一点所说,必须在对接接口的类中实现所有接口中的方法。
其它要点
- 一个类可以实现多个接口
- 抽象的类可以带有抽象和非抽象的方法,如果类带有抽象的方法,则此类必定标识为抽象的
- 要从子类调用父类的方法可以使用
super
关键词