java基础之抽象类与接口

抽象类
1.抽象方法必须为public或者protected(因为如果为private,不能被子类继承,子类无法实现该方法),缺省的情况下默认是public
2.抽象类不能实例化
3.如果一个类继承了抽象类,那这个类必须实现父类中的所有抽象方法,否则这个类也要声明为抽象类
4.可以没有抽象方法,只要在类名前加上abstract
5.其他的和普通类没什么区别,可以有构造方法、静态方法、代码块…

接口
1.接口中的方法只能是public final,不写默认也是public final,当然你可以显示的声明为protected、private,但是编译会出错!
2.接口可以定义成员变量,也就是静态常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name
3.接口中不存在实现的方法(java8之前,后面会讲到特殊情况)
4.可以定义接口变量,但不能实例化,也就是说,例如,有个接口Test
public interface Test{

}
定义一个接口变量:Test test;这是可以的,但是test=new Test();实例化不行
5、实现接口的非抽象类必须要实现该接口的所有方法(因为java8之前接口中的方法都是抽象方法)。
6.java8的新特性(接口中可以有实现的方法啦):
public interface InterfaceTest {

 default void test1(){//默认方法,子类实现接口后可以直接使用,不用再重写
     System.out.println("test1");
 }

 static void test2(){//静态方法,和普通类的静态方法一样,通过类名就可以调用
     System.out.println("test2");
 }

}

相同点:
1.都有抽象方法
2.都不能被实例化
3.继承抽象类或实现接口的类如果不是抽象类就必须实现所有的抽象方法

不同点:
1.抽象类可以有具体实现的方法(java8以后接口也可以有特殊的实现方法),可以定义变量,可以没有抽象方法
2.接口只能有抽象方法,并且只能用public abstract修饰,抽象类中的抽象方法可以用 public/protected abstract修饰
3.接口中只能定义常量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值