抽象类和接口

抽象类


在前面的定义animal类,shot()方法用于描述动物的叫声。但是不同的动物有不同的叫声,所以shot()无法准确描述。对此Java允许在定义方法名中可以不写方法体,不包含方法体的方法称为抽象方法,需要用abstract关键字修饰

abstract void shot();

在定义抽象类时需注意,包含抽象方法就必须定义抽象类,但是在抽象类中不一定要有抽象方法。另外抽象类不能被实例化,抽象类中可能有抽象方法,因为抽象方法没有方法体,不能被调用,如果想要调用需创建一个子类,在子类中将抽象类中抽象方法实现。

abstract class Animal{
	abstract void shot();
}
class Dog extends Animal{
	void shot() {
		System.out.println("喵喵");
	}
}
public class text4 {

	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.shot();
	}

}

接口

当抽象类中的所有方法都是抽象方法时,则这个类可以用另一种方式表示即——接口。

interface Aniaml{
    int ID=1;
    void breathe();
    void run();
}

从上面的代码看,Aniaml是一个接口,但是它的两个构造方法没有用abstract来修饰。这是因为接口中定义的方法和变量都包含一些默认的修饰符,接口中定义的方法默认用"public abstract"来修饰,即抽象方法。接口中的变量默认用"public static final"来修饰,即全局变量。

因为接口中的方法都是抽象的,所以需要一个类实现接口中的方法,这个类就是用implements关键字修饰的类

interface Animal{
	int ID = 1;
	void breathe();
	void run();
}
class Dog implements Animal{
	public void breathe() {
		System.out.println("猫在叫");
	}
	public void run() {
		System.out.println("猫在跑");
	}
}
public class text4 {

	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.breathe();
		dog.run();
	}

}

在程序中还可以定义一个接口用extends关键字继承另一个接口

interface Animal{
	int ID = 1;
	void breathe();
	void run();
}
interface LandAnimal extends Aniaml{
	void LiveOnland();
}
class Dog implements Animal{
	public void breathe() {
		System.out.println("猫在叫");
	}
	public void run() {
		System.out.println("猫在跑");
	}
	public void LiveOnland() {
		System.out.println("在陆地上生活");
	}
}
public class text4 {

	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.breathe();
		dog.run();
		dog.LiveOnland();
	}

}

接口的特点

  • 接口中的方法都是抽象的,不能实例化对象
  • 当一个类实现接口时,如果这个类是抽象类(接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现),则实现接口分方法,否则需要实现接口中的全部方法
  • 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的接口用多个逗号隔开
  • interface A{
        //程序代码
    }
    
    interface B{
        //程序代码
    }
    
    class C implements A,B{
        //程序代码
    }

    一个类继承另一个类的同时可以实现接口,但是extends关键字必须在implements关键字前面

    class Dog extends Canidae implements Aniaml{       //先继承,再实现
    } 

     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值