Java超详细介绍抽象类与接口的使用

网友投稿 266 2022-07-31


目录1.抽象类的语法和特性1.1语法1.2特性2.接口的语法和使用2.1语法2.2特性

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();

}

// 编译出错 -> 抽象方法不能用http://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();

http:// 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();

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中synchronized的几种使用方法(java synchronized)
下一篇:java简单实现自定义日历(java怎么实现日历)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~