java笔记
  • Java语言概述
  • 入门
    • ubuntu安装
    • window配置环境变量
    • 编写HelloWorld
    • 注释
    • 编程风格
    • 进制与字符编码
    • 键盘录入
  • java基础
    • 数据类型
    • 运算符与类型转换
    • 控制语句
      • 选择结构(if-else/swtich)
      • 循环结构(while/do-while/for)
    • 数组
      • 数组基础
      • 数组进阶
    • 面向对象
      • 基础
        • 面向过程和面向对象
        • 类与对象
        • 构造方法
        • 垃圾回收机制garbage collection
        • 关键字
      • 进阶
        • 封装
        • 继承
        • 多态
        • 抽象
        • 内部类
      • 高级特性
        • String类
        • 枚举
        • 注解
    • 异常
    • 常用类
      • 包装类
      • String相关类
      • 时间类
      • 数学类
      • File类
      • 枚举类
    • 单个字符操作(Character 类)
    • Java字符串
      • String
      • StringBuilder
      • StringBuffer
    • Java集合
    • Java 泛型
    • Java解惑
  • 附录:git
  • 附录:转义字符
  • maven
    • pom.xml
    • maven安装
  • 其他
    • BeanUtils
  • java与php语法对比
  • idea
  • 开发记录
  • ExecutorService 异步线程池
Powered by GitBook
On this page
  • abstract
  • 接口
  • 接口与抽象的区别

Was this helpful?

  1. java基础
  2. 面向对象
  3. 进阶

抽象

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表示

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】

抽象方法、普通方法

设计理念

扩展性,体现了“like it”

共性,体现了“is it”

类与接口相互关系:

  • 类与类:继承,单继承 多层继承。

  • 类与接口:实现,单实现,多实现。

  • 接口与接口:继承,单继承,多继承。

关于接口多继承的代码:

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() {}  

}
Previous多态Next内部类

Last updated 5 years ago

Was this helpful?