Java抽象类与接口详解

目录

1.抽象方法以及抽象类

1.抽象方法

2.抽象类

 1.抽象类的注意事项:

2.为什么抽象类中要有构造方法

2.接口

1.接口的定义和使用

1.接口用关键字interface进行定义

 2.接口不能实例化

3.接口和类是实现关系,通过关键字implements实现

4.接口的子类(实现类)

5.接口的注意事项

2.接口和类之间的关系

1.类和类之间的关系

2.接口和类之间的关系

3.接口和接口之间的关系

3.接口中成员的特点

1.成员变量

2.成员方法

3.构造方法

4.接口多态


1.抽象方法以及抽象类

在了解这个之前,我们先来看一个实例

class Animal{
    public void eat(){    
    }
}
class Cat extends Animal{
    
}
class Dog extends Animal{
    
}

在以上案例中,由于猫和狗所吃的东西是不同的,父类无法确认方法体,那么就可以将父类中的eat方法定义为抽象方法,子类对其进行强制重写,变成如下形式:

abstract class Animal{
    public abstract void eat();
}
class Cat extends Animal{

    @Override
    public void eat() {
        System.out.println("猫吃小鱼干");
    }
}
class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

在这里,我们将父类中的eat方法定义为了抽象方法,父类变成了抽象类,子类则必须要重写父类中的抽象方法。

1.抽象方法

被abstract关键字修饰的方法叫做抽象方法。

权限修饰符   abstract   返回值类型   方法名(参数列表);

public abstract void eat(); 

 在这里,子类如果继承与父类,则必须要重写父类中的eat方法。

2.抽象类

 被abstract关键字所修饰的类叫做抽象类。

权限修饰符   abstract   class   类名{}

abstract class Animal{}

 1.抽象类的注意事项:

1.被抽象方法修饰的类必定是抽象类,抽象类中不一定有抽象方法。

abstract class Person{
    //由于play为抽象方法,那么类必须用abstract进行修饰,否则编译器会报错
    public abstract void paly();

}

abstract class Person1{
    //虽然Person1被abstract修饰了,但是其内部不一定有抽象方法
    public void eat(){

    }
}

2.抽象类无法实例化,但可以有构造方法。

public class TestDemo1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Student student = new Student();
        //在这里,编译器会显示Student类被abstract修饰,无法进行构造。

    }
}

abstract class Student{
    private int age;
    private String name;

    public Student() {
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public abstract void study();
}

3.抽象类所继承的子类要么是抽象类,要么重写所有的抽象方法。

abstract class Person{
    abstract void eat();
}
abstract class Student extends Person{
    //在这里,由于Student为抽象类,因此不必重写父类中的eat方法。
}

class Teacher extends Person{
    //由于Teacher并不是抽象类,因此需要重写父类中的抽象方法。
    @Override
    void eat() {
        System.out.println("吃米饭");
    }
}

2.为什么抽象类中要有构造方法

虽然抽象类无法实例化,但是其子类,可以调用父类中的构造方法来进行实例化。因此,建议在抽象类中写上构造方法。

abstract class Person{
    private int age;
    private String name;

    public Person() {
    }

    public Person
  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽幽子956

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值