抽象方法的关键字abstract不能与private,final,static共存
class A extends B{} //true
class A extends B,C{} //false
class A{} class B extends A{} class C extends B{}
先定义一些接口和类:
interface a{} interface b{} interface c{} abstract class AA{}
interface d implements a{} (False)
interface e extends a{} (True)
interface f extends a,b,c{} (True)
interface g extends AA{} (False)
abstract class h implements a,b,c{} (True)
class i implements a,b,c{} (True)
class k extends AA implements a{} (True)
class j implements a extends AA{} (False)
abstract类中可以有抽象方法,也可以有非抽象方法 一个非抽象类是某个抽象类的子类,那么他必须重写父类的抽象方法 抽象类中可以有构造函数 抽象类是不能实例化的,可以靠非抽象子类来实例化
抽象方法必须由子类来实现,不能加private final修饰的方法不可以被覆盖(重写) static方法是由类来实现的
接口体中包含常量(不允许有变量)(public、final可以省略) 接口体中的方法一定是抽象方法,且访问权限是public(public、abstract可以省略) 抽象方法不含方法体{}
interface Printable{
public final int x=100;
public abstract void add();
}
也可以写成
interface Printable{
int x=100;
void add();
}
如果一个非抽象类实现了某个接口,那么这个类必须重写该接口的所有方法 接口中的方法都是public修饰的(public可以省略),非抽象类重写该接口的所有方法,访问权限必须为public(不能降低访问权限) 如果一个类声明实现一个借口,但没有重写接口中的所有方法,那么这个类必须是abstract类
被重写的方法 | 重写的方法 |
---|---|
public | public |
protected | public/protected |
友好 | public/protected/友好 |
接口回调与上转型对象调用子类重写的方法类似
interface Playable{
void play();
}
class Cat implements Playable{
public void play(){
System.out.println("cat");
}
}
public class Test{
public static void main(String[] args){
Playable xx=new Cat(); 声明接口变量,且在接口变量中存放对象的引用
xx.play(); 接口回调
}
}
abstract类和接口都可以有abstract方法 接口中只可以有常量,不能有变量;而abstract类中既可以有常量也可以有变量 abstract类中可以有非abstract方法,而接口不可以
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有