abstract
抽象方法:使用abstract关键字修饰,无方法体(大括号{}),有声明。父类的抽象方法子类必须实现。
意义:为子类提供统一规范的模板,子类必须实现。
特点
抽象方法格式:public abstract void name();
使用abstract关键字修饰。
抽象类不一定有抽象方法,有抽象方法必定是抽象类。
抽象类和其构造方法不能实例化,只能通过子类来实现。
子类必须是抽象类或者具体类重写抽象类中的所有抽象方法。
抽象类以及继承它的子类权限修饰符只能是default。
如:Father f = new Son();
注意:abstract不能和final private static关键字共存。
abstract只能修饰类与成员方法。
代码:
package com.itcode.demo;
/**
* @author: 成都码到功成学员
* @description:
* 抽象abstract
*/
// 抽象类
abstract class FatherAbs{
// 抽象方法 无方法体。
public abstract void ma();
}
class SonAbs extends FatherAbs{
// 必须被重写
@Override
public void ma() {
// TODO Auto-generated method stub
System.out.println("子类");
}
}
public class TestAbstract {
public static void main(String[] args) {
// TODO Auto-generated method stub
// FatherAbs abs = new FatherAbs();//不能实例化
FatherAbs abs = new SonAbs();
abs.ma();
}
}
接口
含义:对外提供规则,用interface修饰的类。就是必须遵守的规范。
作用:实现规范与抽象的分离。
接口特点
接口用关键字interface表示
类实现接口用implements表示
class 类名 implements 接口名 {}
其重写的方法修饰符必须是public。
接口不能实例化,只能按照多态的方式来实例化。
接口的子类:抽象象类【意义不大】、具体类要重写接口中的所有抽象方法。(推荐方案)
类与类间只能是单继承,而接口和接口间可以是单/多继承。
JDK1.8后支持静态方法。
示例:
package com.itcode.demo;
/**
* @author: 成都码到功成学员
* @description:
* 接口
*/
interface FaceTest{
//常量
int AGE=100;
// 方法
public abstract void sleep();
// 静态方法
public static void aa() {
System.out.println("接口静态方法");
}
}
public class TestInterface implements FaceTest{
public static void main(String[] args) {
System.out.println(FaceTest.AGE);
FaceTest.aa();
FaceTest aa = new TestInterface();
aa.sleep();
}
@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("sleep!");
}
}
效果:
接口与抽象的区别
常量【默认修饰符public static final】
抽象方法【默认修饰符public abstract】、静态方法【JDK1.8】
类与接口相互关系:
关于接口多继承的代码:
interface AA{
void aa();
}
interface AB{
void ab();
}
interface AC {
void ac();
}
class Tac implements AA,AB,AC{
@Override
public void ab() {}
@Override
public void aa() {}
@Override
public void ac() {}
}