JAVA SE (11)

–> JAVA SE (10)

抽象类

所有的对象都是通过类描绘的,但是并不是所有的类收拾用来描绘对象的。有的类中没有足够的信息描绘一个具体的对象-这种类为抽象类
抽象类不能实例化对象其余功能依然存在,成员变量、成员方法、构造方法的访问方式和普通类一样。

抽象类的定义:abstract class

抽象方法

抽象方法的定义:public abstract int cal();
只包含方法名,不包含方法体。方法名后面直接跟分号,而不跟花括号。
后果:一个类中包含抽象方法,则该类必须为抽象类;任何子类必须重写父类的抽象方法(或者干脆自己也为抽象类)


接口

接口并不是类。接口无法被实例化(即接口不可以创建对象,但是接口可以创建引用类型的变量,变量指向实现此接口的对象),但是可以被实现。一个实现接口的类要么实现所有的方法,要么声明为抽象类。接口也可被看作一种数据类型(后面会看到接口口的多态)
接口与类的区别:

  • 接口没有构造方法
  • 接口的所有方法均为抽象方法
  • 不能包含成员变量(除了static final变量,若不加修饰,默认为已被static final修饰)
  • 接口支持多继承

接口特性

  • 接口中的每个方法是隐式抽象的(默认带有public static且只能是这种修饰–方法均为公有,其余修饰会报错)

  • 接口中的变量默认被static final修饰(且之能是这种修饰,其余会报错)

  • 接口是隐式抽象的,声明时不用abstract
    接口和抽象类的区别

  • 抽象类中的方法可以有方法体即花括号,但是接口没有;

  • 抽象类中的成员变量可以为各种类型的,接口中只有static final一种

  • 接口中没有静态代码块和静态方法,抽象类可以有

  • 一个类只能继承一个抽象类,但能实现多个接口

接口的继承

接口的继承使用extends。且接口支持多继承

public interface Son extends F1,F2

标记接口
没有任何方法和属性的接口。
目的:

  • 建立一个公共的父接口
  • 向一个类中添加数据

总结

什么时候使用抽象类和接口?
实现多继承–接口
既想拥有方法、也想拥有一些默认实现–抽象类
基本功能(函数)在不断改–抽象类

附:

JDK1.8中,允许给接口添加两种非抽象的方法实现(即可以有大括号具体的方法实现):

  1. 默认方法——添加default修饰
  2. 静态方法——使用static修饰
interface TestJa8{
	//defalt方法只能通过接口实现类的对象调用
	default String getStr(String aa){
		System.out.println("hello,i am" + aa);
		return " ";
	}
	//静态方法只能接口名调用,不能通过实现类的类名或者对象调用
	static void sing(){
		System.out.println("welcom!");
	}
}

接口和多态

接口可以声明一个变量(赋为空指针),或是被绑在一个以此接口实现的对象(类似于普通类的多态)

interface Clock{
	public abstract void sing();
}

class MyClock implements Clock(){
	public void sing(){
		System.out.println("TxL,hello");
	}
}
//j接口的多态
Clock c = new MyClock();

多态详见:–> 多态
–> JAVA SE (12)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值