java 抽象类,接口(一)
·
一 ,抽象类
1、抽象类的核心比喻
抽象类就像一个半成品模板:它定义了一些通用的、已经实现的方法(比如所有动物都会呼吸),但也留下一些 “待实现” 的抽象方法(比如不同动物的叫声不同,只定规则不写具体逻辑),要求子类必须补全这些 “待实现” 的方法才能使用。
2、抽象类的规则
关键字:abstract
不可实例化:抽象类不能直接创建对象,抽象也也有自己的构造方法(abstract)
强制实现:子类必须实现所有抽象方法
内容组成:可包含普通方法(有方法体) + 抽象方法(abstract修饰,无方法体,只有声明);
3.代码
// 抽象类:动物模板(半成品)
abstract class Animal {
// 普通方法(已实现,所有动物通用)
public void breathe() {
System.out.println("动物呼吸空气");
}
// 抽象方法(只定规则,无实现,子类必须补全)
public abstract void makeSound();
}
// 子类:狗(补全抽象方法)
class Dog extends Animal {
// 必须重写抽象方法makeSound
@Override
public void makeSound() {
System.out.println("小狗汪汪叫");
}
}
public class AbstractDemo {
public static void main(String[] args) {
// 错误:抽象类不能直接new(注释掉验证)
// Animal animal = new Animal();
// 正确:实例化子类,向上转型为抽象类类型
Animal dog = new Dog();
dog.breathe(); // 调用抽象类的普通方法:动物呼吸空气
dog.makeSound(); // 调用子类实现的抽象方法:小狗汪汪叫
}
}
4.匿名类:
匿名类(匿名子类)是不能有名字的类,它们不能被引用,只能在创建时用new语句来声明它们。
匿名类: 接口/父类 变量名 = new 接口/父类() { 只定义需要使用的方法 } ; // ;
二 .接口
1.interface
关键字:interface
实现规则:类用implements实现接口,可同时实现多个接口(区别抽象类的单继承);
实例化:不能直接new 接口(),必须由实现类实例化;
子类要求:非抽象实现类必须重写接口中所有抽象方法。
//接口方法的修饰符:不用写public abstract,默认就是,但重写时必须用public;
//接口变量:必须赋值(常量),且不能修改(比如Flyable.TYPE = "新类型"会报错);
//多实现:一个类可实现多个接口(如class A implements B,C),弥补 Java 单继承的不足。
// 接口:可飞行的规则(纯契约)
interface Flyable {
// 抽象方法(默认public abstract,可省略)
void fly();
// 常量(默认public static final,可省略)
String TYPE = "飞行工具";
// JDK8+默认方法(有方法体,可选)
default void showType() {
System.out.println("类型:" + TYPE);
}
}
// 实现类1:鸟(遵守Flyable规则)
class Bird implements Flyable {
// 必须重写抽象方法fly
@Override
public void fly() {
System.out.println("鸟扇动翅膀飞行");
}
}
// 实现类2:飞机(遵守Flyable规则)
class Plane implements Flyable {
@Override
public void fly() {
System.out.println("飞机靠引擎飞行");
}
}
public class InterfaceDemo {
public static void main(String[] args) {
// 不能直接new接口(注释验证)
// Flyable f = new Flyable();
// 实例化实现类,向上转型为接口类型
Flyable bird = new Bird();
Flyable plane = new Plane();
bird.fly(); // 输出:鸟扇动翅膀飞行
bird.showType(); // 调用默认方法:类型:飞行工具
plane.fly(); // 输出:飞机靠引擎飞行
}
}
对象与接口对比

更多推荐




所有评论(0)