抽象类和接口

1.抽象类

含有抽象方法的类是抽象类。使用abstract关键字修饰。
抽象类可以有普通方法,属性,构造器(通过子类调用)。

1.1抽象方法

抽象方法,只有方法的声明,没有方法体。使用abstract关键字修饰。
如下我们创建一个抽象类Animal

public abstract class Animal {

    public Animal() {
    }

    int age;

    public abstract void run(); // 抽象方法

    public void breath() {
        System.out.println("breath");
        run();
    }
}

我们以该类为测试类。
抽象类不能进行实例化。
该Animal类无法通过new关键字进行生成。
我们如果通过一下方式new抽象类,会报错:Cannot instantiate the type Animal

class Test {
    public static void main(String[] args) {
        Animal a = new Animal();
    }
}

1.2为什么使用抽象类

抽象类是一种模板模式,抽象类为所有子类提供一个通用模板,子类可以在这个模板上进行扩展。
通过抽象类,可以避免子类设计的随意性。

1.3使用抽象类

因为抽象类不能够产生实例,所以只能通过子类实例化
如下,我们通过子类进行实现。

/**
 * 抽象方法必须被子类实现
 */
class Cat extends Animal {

    @Override
    public void run() {
        System.out.println("Cat Run");
    }
}

/**
 * 一个抽象类可以继承自另一个抽象类
 */
abstract class Dog extends Animal {
}

1.4小结

  • 有抽象方法的类,只能定义为抽象类。
  • 抽象类不能实例化,即不能用new实例化抽象类。
  • 抽象类可以包含属性、方法、构造器。但是构造器不能用new来实例,只能通过子类调用。
  • 抽象类只能用来继承。
  • 抽象方法必须被子类实现。

抽象方法的意义,方法的设计和方法的实现分离。
具体怎么做,由子类实现。

2.接口(interface)

接口的目的是设计和实现分离;
接口是规范,体现现实世界“如果你是。。。则必须能。。。”;
接口的本质是契约;
开发的项目往往都是面向接口编程;
接口有多继承。extends

2.1接口的成员

接口由抽象方法、常量(在jdk1.8可以加入静态方法、静态块之类的)组成。
下面定义一个接口:

public interface AnimalInterface {
    int MAXAGE = 0;

    void fly();

}

需要指出的是:
在接口中的常量和抽象方法实际是一种省略的写法,等价于:
常量

public static final int MAXAGE = 0;

抽象方法

public abstract void fly();

2.2接口多继承(extends)

如下,我们测试接口的多继承性。

package com.oop.abstractTest;

public interface AnimalInterface {
    public static final int MAXAGE = 0;

    public abstract void fly();

}

interface DogIn {
}

interface CatIn {
}

/**
 * 创建接口TestIn继承自以上三个接口
 */
interface TestIn extends AnimalInterface, DogIn, CatIn {
}

2.3实现类多实现几个接口(implements)

普通的实现类可以多实现几个接口。

/**
 * 创建实现类,多实现接口
 */
class TestIn01 implements AnimalInterface, DogIn, CatIn {

    @Override
    public void fly() {
        // TODO Auto-generated method stub

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值