浅学抽象类和接口

抽象类

1、什么是抽象类?

被abstract修饰的类叫抽象类

有抽象方法的类

2、什么是抽象方法?

没有方法体的方法称为抽象方法

3、抽象类的特点

  • 抽象类和抽象方法都由abstract关键字修饰

  • 抽象类可以没有抽象方法,但是有抽象方法的类一定是抽象类

    abstract class A {
        public abstract void a();
        public void b(){
            
        }
    }
    
  • 抽象类不能创建对象

  • 一个类想要继承一个抽象类,要么该类也是一个抽象类,要么是一个普通类(必须抽象所有的抽象方法)

4、抽象类成员的特点

  • 成员变量

    可以有静态成员变量

    可以有非静态成员变量

    可以有自定义常量

  • 成员方法

    可以有抽象方法

    可以有非抽象方法

  • 构造方法

    有构造方法

    但是不能创建对象

    为什么会有构造方法?

    抽象类的构造方法是给子类调用,为了给抽象类中的成员变量进行初始化的,还提供给子类使用

5、abstract关键字不能和哪些关键字共存?

  • private

    因为abstract修饰的方法是抽象方法,必须要被子类重写,如果该方法同时又被private修饰的话,子类就不能重写该方法了,所有冲突

  • static

    因为被static修饰的方法可以直接通过类名去调用,如果该方法同时又被abstract修饰(没有方法体),调用没有方法体的方法???

  • final

    因为abstract修饰的方法是抽象方法,必须要被子类重写,如果该方法同时又被final修饰的话,子类就不能重写该方法了,所有冲突

接口

1、什么是接口?

比抽象类更加抽象的表现形式,称为接口

2、定义格式

interface A {
    
}

接口不是类

3、接口的特点

  • 不能创建对象
  • 一个类想要实现一个接口,要么该类也是一个抽象类,要么是一个普通类(必须抽象所有的抽象方法)

4、成员特点

  • 成员变量

    全是自定义常量

    默认修饰符:public static final

  • 成员方法

    接口中所有的方法都是抽象方法(错误的解释)

  • 构造方法

    接口中没有构造方法

5、接口与接口,类与类,类与接口

  • 类与类:继承,单继承
  • 接口与接口:继承,多继承
  • 类与接口:实现,可以多实现

6、什么时候使用接口,什么时候使用类(包含抽象类)?

当两个类之间存在“ is a ”的关系,就要定义类,两个类之间是继承关系

abstract class Animal {
    public abstract void eat();
    public void drink() {
        System.out.println("喝水");
    }
    public void sleep() {
        System.out.println("睡觉");
    }
}
class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("吃肉");
    }
}
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}
class Pig extends Animal {
    @Override
    public void eat() {
        System.out.println("吃白菜");
    }
}

接口是额外扩的功能,该类本身不存在此功能,而且不是is a 的关系就需要使用接口

abstract class Animal {
    public abstract void eat();
    public void drink() {
        System.out.println("喝水");
    }
    public void sleep() {
        System.out.println("睡觉");
    }
}
class Dog extends Animal implements Aircraft {
    @Override
    public void eat() {
        System.out.println("吃肉");
    }

    @Override
    public void fly() {
        System.out.println("狗穿上飞行器就能飞");
    }
}
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}
class Pig extends Animal {
    @Override
    public void eat() {
        System.out.println("吃白菜");
    }
}
/**
 飞行器
 */
interface Aircraft {
    void fly();
}

7、接口与抽象类

相同点

  • 不能创建对象
  • 都有抽象方法,并且必须被子类,或实现类重写

不同点

  • 关键字不同

    接口:interface

    抽象类:abstract

  • 成员变量不同

    接口:常量,public static final xxx

    抽象类:普通变量,静态变量,常量

  • 成员方法不同

    接口:抽象方法(JDK1.8以后可以定义静态方法)

    抽象类:普通方法,静态方法,抽象方法

  • 构造方法不同

    接口:没有构造方法

    抽象类:有构造方法,但不能创建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小玖_q_2865453746

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

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

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

打赏作者

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

抵扣说明:

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

余额充值