一.抽象类

1.抽象类的框架
 

public abstract class Father{

        成员变量

        抽象方法(不能有方法体也就是没有{})

        具体方法

}
public class Son extends Father{

}

①成员变量

private String name;
protected int age;
public String type;

不可以用abstract来定义成员变量

②抽象方法

抽象方法不能有方法体,只能写成

public abstract void eat();

 后面是没有{}方法体的,相当与跟子类说有了这个框架,要求子类必须进行方法重写来使用该方法

 强制要求子类使用所有抽象方法

③具体方法

// 具体方法 - 有默认实现,但子类可以重写
    public void sleep() {
        System.out.println(name + "在睡觉"); // 默认实现
    }

具体方法不能使用abstract。

具体方法没有强制要求在子类中使用,可以选择性的使用或者不用。

具体方法可以默认实现(也就是输出父类)

具体方法可以选择性的进行方法重写,来输出想要的子类 。

(包含抽象方法和具体方法(选择性))

④抽象类不能直接实例化

2.super关键字(部分)

①定义

super.sleep() 就是告诉Java:
"先执行一下我爸爸(父类)的那个sleep方法"

②例子

举一个可以使用super来实现父类和子类的输出(父类的默认实现和子类的方法重写)

利用super来先执行父类

public abstract class Animal {
    public void eat() {
        System.out.println("动物在吃东西");
    }
}

public class Cat extends Animal {
    @Override
    public void eat() {
        super.eat();  // 调用父类的eat方法
        System.out.println("猫在吃鱼");  // 子类自己的内容
    }
测试:

java

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();  // 只调用这一句!
    }
}
输出:

text

动物在吃东西  ← 父类的输出(因为super.eat())
猫在吃鱼      ← 子类的输出

二.接口

1.接口的基本框架

①接口定义

用interface

②接口继承(接口——>接口)

接口继承是说 接口继承接口,假如说接口A里面有一个抽象方法1,

然后有一个新的接口B继承(extends)了接口A,

然后添加了新的抽象方法2,

可以再接下来的类来实现B就可以用两种抽象方法1和2 

接口方法:默认是 public abstract,也就是说完整的是public abstract void 吃();

③接口实现(类——>接口)

// 基础接口
interface 动物 {
    void 吃();
}

// 接口继承接口
interface 宠物 extends 动物 {
    void 卖萌();  // 新增方法
}

// 类实现扩展后的接口
class 狗 implements 宠物 {
    public void 吃() {     // 来自动物接口
        System.out.println("狗吃狗粮");
    }
    
    public void 卖萌() {   // 来自宠物接口
        System.out.println("摇尾巴");
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐