如果一个类中没有包含足够的信息来描绘一个对象,那么这个类就是抽象类.
在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法.
abstract class Shape {
abstract void draw();//抽象方法
}
class Flower extends Shape{
@Override
public void draw() {
System.out.println("❀");//重写
}
}
public class Test {
public static void main(String[] args) {
// Shape shape = new Shape();
Shape shape = new Flower();
shape.draw();
}
}
注意事项:
- 抽象类不能实例化对象.
- 抽象方法不能被final和static修饰.
- final修饰的不能重写,而由abstract修饰的必须重写.
预防出错:在实际开发过程中如果是子类完成,此时如果不小心调用成父类的, 使用普通类,编译器不会报错的. 但是父类是抽象类就会在实例化的时候提示错误.
接口就是公共的行为规范标准,这样就可以通用**。
接口的定义方式就是将定义类的class关键字变成 interface关键字.
interface IUSB {
double brand = 3.0;//默认是 final public static
void openDevice();
void closeDevice(); //默认是 public abstract
default void cpu() {
System.out.println("默认方法");
}
}
提示: 创建接口时, 接口的命名一般以大写字母 I 开头+大驼峰.
实现一个笔记本电脑: 提供鼠标、键盘接口
- USB接口:打开设备、关闭设备功能 .
- 鼠标类:实现USB接口,并具备点击功能 .
- 键盘类:实现USB接口.
interface IUSB {
double brand = 3.0;
void openDevice();
void closeDevice();
default void cpu() {
System.out.println("默认方法");
}
}
//使用接口
class Mouse implements IUSB {
@Override
public void openDevice() {
System.out.println("打开鼠标");
}
@Override
public void closeDevice() {
System.out.println("关闭鼠标");
}
public void click() {
System.out.println("鼠标点击");
}
}
class KeyBoard implements IUSB {
@Override
public void openDevice() {
System.out.println("打开键盘");
}
@Override
public void closeDevice() {
System.out.println("关闭键盘");
}
}
public class Test9 {
public static void main(String[] args) {
func(new KeyBoard());
func1(new KeyBoard());
System.out.println(IUSB.brand);
}
public static void func(IUSB iusb) {
iusb.openDevice();
}
public static void func1(IUSB iusb) {
iusb.closeDevice();
}
}
注意事项:
- 接口不能使用new来创建对象.
- 接口方法默认是 public abstract.
- 接口中不能定义静态代码块和构造方法.
- 接口虽然不是类,但是编译后字节码文件也是.class的.
核心区别: 抽象类中可以包含普通方法和普通字段, 子类可以直接使用, 而接口中不能包含普通方法, 子类必须重写所有的抽象方法.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)