抽象类与接口

一.抽象类

1.理解

        同一个父类的不同子类拥有同种行为,但行为的实现方式不同。我们就可以将该行为方法定义为抽象方法,父类为抽象类。由父类指出子类应该有的方法,具体的实现交给较为具体的子类。

2.规则

  1. 抽象方法与抽象类必须使用abstract修饰
  2. 抽象方法不能有方法体{},子类完成具体实现。
  3. 抽象类不能被实例化,其构造器用于被子类调用
  4. 含有抽象方法的类只能定义为抽象类
  5. 由于子类要去重写抽象类中的方法,所以abstract不能与final,static,private连用。

3.意义: 

        利用多态,使程序更加灵活;抽象类可以作为子类的设计模板。

public class Main {
    public static void main(String[] args) {
         Animal c=new Cat("lucy");
         Animal d=new Dog("luck");
        System.out.println(c.getName());//lucy
        System.out.println(c.getType());//猫
        c.call();//喵喵喵
        c.eat();//猫俩、鱼
        System.out.println(d.getName());//lucy
        System.out.println(d.getType());//狗
        d.call();//汪汪汪
        d.eat();//狗粮、肉
    }
}
abstract class Animal{
    private String name;
    public Animal(String name){
        this.name=name;
    }
    abstract protected void call();
    abstract protected void eat();
    abstract protected String getType();
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

class Cat extends Animal{
    public Cat(String name){
        super(name);
    }
    protected void call(){
        System.out.println("喵喵喵");
    }
    protected void eat(){
        System.out.println("猫粮、鱼");
    }
    protected String getType(){
        return "猫";
    }
}
class Dog extends Animal{
    public Dog (String name){
        super(name);
    }
    protected void call(){
        System.out.println("汪汪汪");
    }
    protected void eat(){
        System.out.println("狗粮、肉");
    }
    protected String getType(){
        return "狗";
    }
}

二.接口

1.理解

        抽象类是多个类的设计模板,而接口则比抽象类更抽象,他里面只有常量与方法,定义的是多个类共同的行为规范。

2.定义

[修饰符] interface 接口名 extends 父接口1,父接口2...
{
    常量定义...
    抽象方法定义...
    内部类,接口,枚举定义...
    私有方法,默认方法,类方法定义...
}
  1. 修饰符为public或省略(default)
  2. 接口不能继承类
  3. 不能被实例化,不能包含构造器和初始化块
  4. 不包含实例变量,只能是(pubilc static final/省略)静态常量,须指定默认值
  5. 系统会自动为抽象方法加pubilc abstract
  6. 内部类默认(public static)
  7. 私有方法主要为默认方法与类方法提供支持,作为工具方法。可以用static修饰
  8. 除私有方法和默认方法外,所有成员均为pubic修饰
  9. 私有,默认,类方法都必须有方法体{}

默认方法其实就是实例方法,目的是当我们要新增一个方法时,要去修改涉及的全部类,使用默认方法就不必去一个一个改了,必要时覆写即可。但是由于接口没有定义字段,所以默认方法也就不能访问字段。

(建议先别管非抽象方法,会混淆的。)

3.接口的继承

        接口支持多继承,子类会获得父接口的所有抽象方法,常量。

4.接口的使用

        实现接口使用implement关键字,类可以实现多个接口

接口的主要用途:

  1. 定义接口引用变量,可以转型
  2. 调用接口中的常量
  3. 被其他类实现
public class Main {
    public static void main(String[] args) {
        Computer pc=new Computer();
        pc.flashDrive.read();//U盘正在通过USB读取数据...
        pc.flashDrive.write();//U盘正在通过USB写入数据...
        pc.keyBoard.read();//键盘正在通过USB读取数据...
        pc.keyBoard.write();//键盘正在通过USB写入数据...
    }
}

interface USB{
    void read();//public abstract省略
    void write();
}

class FlashDrive implements USB{
    public void read(){
        System.out.println("U盘正在通过USB读取数据...");
    }
    public void write(){
        System.out.println("U盘正在通过USB写入数据...");
    }
}
class KeyBoard implements USB{
    public void read(){
        System.out.println("键盘正在通过USB读取数据...");
    }
    public void write(){
        System.out.println("键盘正在通过USB写入数据...");
    }
}
class Computer{
    KeyBoard keyBoard=new KeyBoard();
    FlashDrive flashDrive=new FlashDrive();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值