- 抽象类:包含一个抽象方法的类就是抽象类
抽象方法:用abstract关键字声明,而未被实现的方法
抽象类不能实例化,必须通过子类实例化
抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法
格式:
abstract class Abs {
private int age;
public void tell() {
}
// 抽象方法
public abstract void say();
}
class AbsSon extends Abs {
public void say() {
System.out.println("I print sth.");
}
}
public class Extends01 {
public static void main(String[] args) {
AbsSon a = new AbsSon();
a.say();
}
}
- 接口:一种特殊的类,里边全部是由全局常量和公共的抽象方法组成
接口的格式:
Interface 接口名称{
全局常量
抽象方法
}
接口的实现必须通过子类,使用关键字implements, 而且接口可以多实现(多继承)
一个子类可以同时继承抽象和实现接口
一个接口不能继承一个抽象类,但可以通过extends关键字同时继承多个接口,实现接口的多继承
interface Inter1 {
public static final int AGE = 100; // 全局常量
public abstract void tell(); // 公共的抽象方法
}
interface Inter2 {
public abstract void say();
}
abstract class Abs1 {
public abstract void print();
}
// 一个子类可以同时继承抽象类和实现接口
class A extends Abs1 implements Inter1,Inter2 {
public void tell(){
}
public void say() {
}
public void print() {
}
}
interface Inter3 extends Inter1,Inter2 {
// 实现了接口的多继承
}
public class InterfaceDemo {
public static void main(String[] args) {
A a = new A();
a.print();
}
}
- 多态性的体现:方法的重载和重写;对象的多态性
对象的多态性:向上转型,程序会自动完成
父类 父类对象 = 子类实例
向下转型, 强制类型转换
子类 子类对象 = (子类)父类实例 - instanceof 关键字: 判断一个对象到底是不是一个类的实例,布尔型
- 泛型(generic):JDK1.5之后新加的功能
泛型可以解决数据类型的安全性问题,在类声明的时候,通过一个标识表示类中某个属性的类型,或者是某个方法的返回值及参数类型
格式:
访问权限 class 类名称<泛型,泛型…> {
属性
方法
}
对象的创建: 类名称<具体类型> 对象名称 = new 类名称<具体类型>(); - 泛型接口:声明泛型接口和声明泛型类的语法类似,也是在接口名称后边加<T>
格式: interface 接口名称<泛型标识> {} - 泛型方法:泛型方法中可以定义泛型参数,此时参数的类型就是传入数据类型
格式: 访问权限 <泛型标识> 泛型标识 方法名称(泛型标识 参数名称)
private <T>T tell(T t) - 泛型数组:在使用泛型方法时,也可以传递或者返回一个泛型数组
格式: public static <T>void tell(T arr[]) {}