Java抽象类和接口

父类定义了子类中的共同行为,接口定义不同类的共同行为。

抽象类

抽象类不可 new 一个实例,可以包含抽象方法,没有实现,这些方法在子类中实现。

使用 abstract 修饰符表示,用在方法或者类前。

包含抽象方法的类必须声明为抽象类。

抽象类的构造方法定义为 protected,因为只能被子类调用

注意:子类可以覆盖父类的方法并定义为 abstract,为了使父类的方法变得无效;

          父类是具体的,子类也可以定义为抽象类。

接口

接口和类很相似,但是只包含常量和抽象方法。

目的是为了指明各种对象的共同行为。表示 "is-kind-of" 关系

使用关键字 interface 定义一个接口,语法:

修饰符 interface 接口名{

        /** 常量声明 */

        /** 方法签名 */

}

某个类实现该接口时,使用关键字 implement ,这种关系称为接口继承,和类继承本质相同,都简称 继承。

接口和抽象类的比较

抽象类:变量和方法无限制;子类通过构造方法链调用构造方法,不能用new实例化。

接口:变量必须是 public static final;方法必须是 public abstract 实例方法;没有构造方法;不能用new实例化。

一般 类名是名词,接口名是形容词或者名词。

举栗子

package test;

interface A {
	public static final String MSG = "hello"; // 全局常量
	public abstract void print(); // 抽象方法
}

interface B {
	public abstract void get();
}

class X implements A, B {
	@Override
	public void print() {
		System.out.println("AAAAA");
	}

	@Override
	public void get() {
		System.out.println("BBBBB");
	}
}

public class test {
	public static void main(String[] args) {
		// 第一个测试
		X x = new X(); // 实例化子类对象
		A a = x; // 向上转型
		B b = x; // 向上转型
		a.print();
		b.get();
		System.out.println(A.MSG);

		// 第二个测试
		A aa = new X();
		B bb = (B) aa;
		bb.get();

		// 第三个测试
		A aaa = new X();
		B bbb = (B) aaa;
		bbb.get();// aaa本质上是X对象的实例
		System.out.println(aaa instanceof A);
		System.out.println(aaa instanceof B);
	}
}
// 程序运行结果:
// AAAAA
// BBBBB
// hello
//BBBBB
//BBBBB
//true
//true

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值