一、抽象类
- abstract修饰的类叫做抽象类
- 特点:
- 不可以实例化对象(通过向上转型 类的继承)
- 类中可以定义抽象类的方法(继承类必须重写抽象的方法)
- 抽象类中可以没有抽象方法
- demo
public abstract class Animal {//抽象类
private int num;
public ...
}
二、抽象方法
- abstract修饰的方法叫做抽象方法,抽象方法只有方法的声明而没有方法的实现(没有方法体),包含抽象方法的类本身必须被声明为抽象的
- demo
public abstract class Animal {
private int num;
public abstract void shout();//由abstract修饰,没有方法体
}
三、抽象类的继承
- 派生类继承抽象类必须实现抽象类中所有抽象的方法,否则派生类也必须定义为抽象类
- demo
pubilc class Dog extends Animal {
public void shout() {
System.out.println("woof");
}
}
public abstract class Cat extends Animal {//由于没有实现抽象方法,所以把这个类定义为抽象类
}
public class PersianCat extends Cat { //Cat是没有实现抽象方法的抽象类
public void shout() {//实现抽象类方法
System.out.println("meow");
}
}
四、接口
- 作用:用来增加一些额外的功能,接口中并不给出具体实现,要由继承这个接口的类来实现这些功能
- 接口的意义:
- 弥补java中单继承机制的不足。
- 接口中只有方法的声明没有方法的实现(都是抽象方法),这些方法在不同的地方被不同的类实现,而这些功能可以具有不同的行为(功能)
- 接口是一系列方法的声明,是一些方法特征的集合,接口可以看做是一种特殊的抽象类,其中包含常量和方法的声明,没有变量和方法的实现
- 特点
- 一个类可以同时实现多个接口
- 一个接口可以被多个无关的类实现‘
- 一个类实现接口必须实现接口中所有的抽象方法,否则必须定义为抽象类(同抽象类的继承)
-
语法
interface 接口名称 {
- 接口中的变量声明
- 接口中的抽象方法声明//可以没有abstract修饰
}public class 类名 implements 接口1 接口2 …{
// 实现接口中的方法
} -
接口的继承
- 接口可以继承接口,与类的继承理念一致:一个接口继承一个父接口会继承父接口中定义的所有方法和属性
- java中接口的继承是多继承制,即一个接口可以同时继承多个接口(区分类的继承——只能有一个父类)
- demo
interface Compare {
public int compareTo(Object other);//声明抽象方法,可以没有abstract修饰
}
public Employee implements Compare {
public int conpareTo(Object other) {//实现抽象方法
//方法体
}
}
五、抽象类和接口总结
- 抽象类:
- 不能实例化,但是可以声明抽象类的引用
- 包含抽象方法的类必须定义为抽象类
- 不包含抽象方法的类不一定不是抽象类(抽象类中可以不包含抽象方法)
- 抽象方法不含方法体,必须显示定义为abstract
- 抽象方法的派生类必须实现基类的所有抽象方法
- 接口
- 弥补java单继承的不足
- 不能实例化,但是可以声明接口变量
- 包含常量和方法的声明,不含变量和方法的实现(
- 常量可以没有final的修饰,必须初始化,在接口实现类中不能修改值;
- 方法可以没有abstract修饰,在接口实现类中必须实现;
- static和default方法中有方法体) - 接口中的抽象方法不能有方法体(即便是空的方法体{ }也不行)
- 接口不能继承类
- 接口中可以继承(extends)多个接口(","分隔开)
- 一个类可以实现(implements)多个接口(","分隔开)
来源:CSDN
作者:Java the world
链接:https://blog.csdn.net/u013140841/article/details/103862331