Java超详细介绍抽象类与接口的使用
作者:xaiobit_hl
1.抽象类的语法和特性
1.1语法
1.在Java中,一个类如果被abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
// 抽象类:被abstract修饰的类 public abstract class Shape { // 抽象方法:被abstract修饰的方法,没有方法体 abstract public void draw(); abstract void calcArea(); // 抽象类也是类,也可以增加普通方法和属性,也可以包含构造方法 public double getArea() { return area; } protected double area; // 面积 }
1.2特性
1. 抽象类不能直接实例化对象
Shape shape = new Shape(); // 编译出错 -> 抽象类不能被实例化
2. 抽象方法不能是 private 的
abstract class Shape { abstract private void draw(); } // 编译出错 -> 抽象方法不能用private修饰
注意:抽象方法没有加访问限定符时,默认是public.
3. 抽象方法不能被 final 和 static 修饰,因为抽象方法就是用来被子类重写的,两者是”天敌“;
public abstract class Shape { abstract final void methodA(); abstract public static void methodB(); } // 编译报错: final和static修饰抽象方法,会出问题,二者属于”天敌“
4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要 使用 abstract 修饰
abstract class Shape { abstract void draw(); abstract public void calcArea(); } //1.实现抽象方法 class Cycle extends Shape { @Override void draw() { System.out.println("●"); } @Override public void calcArea() { System.out.println("Π*r*r"); } } //2.不实现抽象父类的抽象方法,但是将子类也定义为抽象类 abstract class Triangle extends Shape { }
5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
2.接口的语法和使用
2.1语法
1.接口的定义格式与类的定义差不多,只要把class改成interface关键字即可。
public interface IOperation { public abstract void method1(); public void method2(); abstract void method3(); void method4(); }
接口名的的注意事项:1.接口的命名一般以大写的 "I" 开头;2.接口的名字一般使用形容词性单词
推荐:阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性。
2.2特性
1.接口不能直接使用,必须要被一个类来 "实现",并且这个类要实现这个接口中的所有抽象方法
public interface IOperation { public abstract void method1(); abstract void method2(); } class A implements IOperation { //如果不重写接口中的抽象方法,代码在编译期间就会报错 //如果不想重写,那么这个类一定是抽象类 @Override public void method1() { } @Override public void method2() { } }
2.接口与接口之间是继承(extends)关系,类与接口之间是实现关系(implements)关系
public interface IOperation { } class A implements IOperation { } interface Io extends IOperation { }
3.接口类型是一种引用类型,不能实例化对象
4.接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)
public interface IOperation { private void method() { } //编译报错 }
5. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现
public interface IOperation { void method(); //编译报错:接口中的方法不能自己实现 public abstract void A() { } }
6. 重写接口中方法时,不能使用 default 访问权限修饰 7. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量,不能改变
interface IA{ double a = 3.0; // 默认被:final public static修饰 } public class TestDemo { public static void main(String[] args) { System.out.println(IA.a); // 可以直接通过接口名访问,说明是静态的 //编译报错 IA.a = 2.0; // 说明brand具有final属性 } }
8. 接口中不能有静态代码块和构造方法
interface USB { // 编译失败:接口中不能有构造方法 public USB(){ } {} // 编译失败:接口中不能有实例代码块 void openDevice(); void closeDevice(); }
到此这篇关于Java超详细介绍抽象类与接口的使用的文章就介绍到这了,更多相关Java抽象类与接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!