抽象类和接口都是顶层设计,在项目早期就需要确定
抽象类
无法具体描述事物的类
抽象方法:专门用于继承的子类来重写的方法,没有方法体
抽象类:抽象方法所存在的类
抽象类不一定只含有抽象方法,也可以有有实现的方法
抽象方法只能存在于接口或抽象类
抽象类的使命是用于被继承
抽象类的子类必须重写实现父类的抽象方法
如果未实现所有抽象方法的子类必须也声明抽象类
具体声明为abstract的类:
abstract class GrandFather {
protected abstract void university();
protected abstract void work();//定义了两个抽象方法,在子类中这些必须实现
}
abstract class Father extends GrandFather{
@Override
protected void work(){
System.out.println("有工作了");//实现了一个但还要实现university的抽象方法
}
}
class Son extends Father{
@Override
protected void university(){
System.out.println("上大学了");//这里全部实现
}
}
public class Main {
public static void main(String[] args) {
Son son = new Son();
son.work();
son.university();
}
}
/*
打印结果为:
有工作了
上大学了
*/
接口
接口没有构造函数
只有常量和抽象方法的定义,没有方法的实现(Java8之前,Java8之后接口内可以有default修饰的有实现的方法体)
以interface关键字声明的“类”
接口无法被new即实例化
-
接口中的变量声明默认以
static和final修饰,即常量 -
接口中的方法默认使用
abstract修饰,即抽象方法
接口着重于行为规范,可以应用于有对应行为的事物
接口可以多继承(一个对象可以继承多个接口)
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.fly();
person.run();
}
}
interface IRun {
String location = "地方";
void run();
}
interface IFly {
String location = "地方";
void fly();
}
class Person implements IFly, IRun{
@Override
public void run() {
System.out.println("我会跑");
}
@Override
public void fly() {
System.out.println("我会飞");
}
}
/*
打印结果为:
我会飞
我会跑
*/
同时,访问接口方法的方法还能将对象赋值给接口,由接口变量来调用方法,如:
public class FlyDemo {
public static void main(String[] args) {
IFly iFly0 = new Bird();//这里IFly是个接口
iFly0.fly();
IFly iFly1 = new AirPlane();
iFly1.fly();
}
}
/*
打印结果为:
鸟在飞
飞机在飞
*/

被折叠的 条评论
为什么被折叠?



