- 抽象类
- 注意事项
- 接口
- 定义接口的详细说明
- 接口中包含静态方法
- 接口中包含默认方法
- 默认方法中可以调用静态方法
- 接口和抽象类的区别
包含抽象方法的类就是抽象类,抽象类由关键字abstract定义,其中抽象方法也是用abstract来修饰,抽象方法没有方法体。继承抽象类的子类必须在其定义过程中实现父类中的抽象方法(重写),重写的方法中可以什么都不做,即方法体中为空。
//抽象类定义
abstract class Person{
//抽象方法中可以包含各适用范围属性
private int id;
public String name;
protected String sex="男";
int age=26;
//构造方法定义,抽象类中若是定义构造方法时候必须包含一个无参构造方法,不能只定义有参构造方法
//或者不提供任何一种构造方法,此时,系统默认提供一个无参的构造方法
public Person(){}
public Person(String name){
this.name=name;
}
//抽象方法定义,修饰符可以是default,public和protected
abstract public void work(); //抽象方法定义,修饰符不能为private,因为private的情况下,子类无法访问,则更无法取实现。
//以下抽象方法定义也可以
//public abstract void work();
//具体方法定义
public void setId(int id){
this.id=id;
}
}
//子类继承抽象类并且必须实现其中的抽象方法
class Student extends Person{
public void work() {
System.out.println("上班!");
}
}
注意事项
抽象类可以包含属性,方法和构造方法,抽象类中的构造方法不能用来new实例对象,只能被子类调用;
抽象类只能用来被继承,且抽象方法必须被子类实现;
含有抽象方法的类只能定义成抽象类;
抽象类不能创建实例,但是可以用于声明引用变量类型。
接口中定义了一组规范或者说定义了一组规则,是对对象的一种抽象,最能体现面向对象的精髓。
定义接口的详细说明1、访问修饰符只能是public或者默认修饰符;
2、接口名和类名采用相同命名机制;
3、extends:接口可以多继承;
4、接口中不能包含构造方法;
5、常量:接口中的属性只能是常量,总是public static final修饰,不写也是;
6、子类通过关键字implements来实现接口中的规范;
7、接口不能创建实例,但是可以用于声明引用变量类型;
8、接口中的方法只能是public abstract,省略也是,jdk1.8以后可以包含普通的静态方法或者默认方法。
public class Test {
public static void main(String[] args) {
A.staticMethod();
Test_A.staticMethod();
}
}
interface A {
public static void staticMethod(){
System.out.println("A.staticMethod");
}
}
class Test_A implements A {
public static void staticMethod(){
System.out.println("Test_A.staticMethod");
}
}
接口中包含默认方法
public class Test {
public static void main(String[] args) {
A a = new Test_A();
a.moren();
}
}
interface A {
default void moren(){
System.out.println("我是接口 A 中的默认方法!");
}
}
class Test_A implements A {
@Override
public void moren() {
System.out.println("Test_A.moren");
}
}
默认方法中可以调用静态方法
public class Test {
public static void main(String[] args) {
A a = new Test_A();
a.moren();
}
}
interface A {
public static void staticMethod(){
System.out.println("A.staticMethod");
}
public default void moren(){
staticMethod();
System.out.println("A.moren");
}
}
class Test_A implements A {
public static void staticMethod(){
System.out.println("Test_A.staticMethod");
}
}
接口和抽象类的区别
1.接口就是比抽象类还要抽象的抽象类,可以更加规范的对子类进行约束。全面而专业地实现了:规范和具体实现的分离。
2. 抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接
口是完全面向规范的,规定了一批类具有的公共方法规范。



