一、多态
特点:同一个事件发生在不同的对象上会产生不同的结果。
多态存在的三个必要条件
1、继承
2、重写
3、父类引用指向子类对象:Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
实现方式:
1、重写
2、接口
3、抽象类和抽象方法
二、抽象类、抽象方法
1、 抽象类不能被实例化(抽象类自己可以有已经实现的方法)
2、抽象方法只包含一个方法名,而没有方法体
3、如果一个类包含抽象方法,那么该类必须是抽象类。
4、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法
5、任何子类必须重写父类的抽象方法,或者声明自身为抽象类
public abstract class Employee { private String name; private String address; private int number; public abstract double computePay(); }
三、封装
1. 修改属性的可见性来限制对属性的访问(一般限制为private)
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
public class Person{ private String name; private int age; public int getAge(){ return age; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public void setName(String name){ this.name = name; } }
四、接口
1、接口和类的区别:
(1)接口不能用于实例化对象。
(2)接口没有构造方法。
(3)接口中所有的方法必须是抽象方法。
(4)接口只能包含 static 和 final 的成员变量。
(5)接口不是被类继承了,而是要被类实现
(6)接口支持多继承
2、抽象类和接口的区别:
(1)一个类只能继承一个抽象类,而一个类却可以实现多个接口
(2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3、特性:
(1)接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
(2)接口中的方法也是隐式抽象的, 会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰
JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去
(3)接口中的变量也是隐式抽象的, 会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)
4、接口的实现
必须实现接口内所描述的所有方法,否则就必须声明为抽象类
/* 文件名 : Animal.java */ interface Animal { public void eat(); public void travel(); } /* 文件名 : MammalInt.java */ public class MammalInt implements Animal{ public void eat(){ System.out.println("Mammal eats"); } public void travel(){ System.out.println("Mammal travels"); } public static void main(String args[]){ MammalInt m = new MammalInt(); m.eat(); m.travel(); } }
5、接口的多继承
public interface Hockey extends Sports, Event
6、标记接口
没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:
(1)建立一个公共的父接口:
正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。
例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
(2)向一个类添加数据类型:
这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),
但是该类通过多态性变成一个接口类型。
package java.util; public interface EventListener {}