美文网首页
基础问题:抽象类/接口的细节特点

基础问题:抽象类/接口的细节特点

作者: 凉风拂面秋挽月 | 来源:发表于2019-12-21 19:46 被阅读0次

抽象类

特点:
1、方法只有声明,没有实现时,该方法就是抽象方法,需要被abstract修饰。
2、抽象类不可以被实例化。因为用抽象方法无意义。
3、抽象类必须由其子类覆盖了所有的抽象方法,该子类才可以被实例化,否则这个子类还是抽象类。
细节:
1、抽象类中可以有构造函数,用于给子类初始化。
2、抽象类可以不定义抽象方法,目的是不让该类创建对象。
3、abstract关键字不可以与private、static、final关键字共存。
4、抽象类与一般类的不同点:
①一般类有足够信息描述事物;抽象类描述事物的信息可能不足。
②一般类中不能定义抽象方法,只能定义非抽象的;抽象类中既能定义抽象的,也能定义非抽象的。
③一般类能被实例化;抽象类不能被实例化。
5、抽象类一定是父类,因为需要子类覆盖其方法后才能被初始化。

使用原则:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
(5)抽象类不可以用final声明,因为抽象类必须有子类,而final定义的类不能有子类
添加:同4,抽象类在实现接口的时候可以不实现接口的方法(当然也可以实现),如果不实现就是抽象类的子类去实现,相当于异常的try catch和throw的区别
设计模式:
抽象类的最常见使用是模板模式。
例如,现在有三类事物:
(1)机器人:充电,工作;
(2)人:吃饭,工作,睡觉;
(3)猪:进食,睡觉。
现要求实现一个程序,可以实现三种不同事物的行为。
先定义一个抽象行为类.

public abstract class Action{
    
    public static final int EAT = 1 ;
    public static final int SLEEP = 3 ;
    public static final int WORK = 5 ;
    
    public abstract void eat();
    public abstract void sleep();
    public abstract void work();
    
    public void commond(int flags){
      switch(flags){
        case EAT:
            this.eat();
            break;
        case SLEEP:
            this.sleep();
            break;
        case WORK:
            this.work();
            break;
        case EAT + SLEEP:
            this.eat();
            this.sleep();
            break;
        case SLEEP + WORK:
            this.sleep();
            this.work();
            break;
        default:
            break;
        }
    }
}

定义一个机器人类:

public class Robot extends Action{

    @Override
    public void eat() {
        System.out.println("机器人充电");
        
    }

    @Override
    public void sleep() {
        
    }

    @Override
    public void work() {
        System.out.println("机器人工作");
        
    }
    
}

其他同理
在测试类调用

public class AbstractDemo {

    public static void main(String[] args) {
        
        fun(new Robot());
        
        fun(new Human());
        
        fun(new Pig());

    }
    
    public static void fun(Action act){
        act.commond(Action.EAT);
        act.commond(Action.SLEEP);
        act.commond(Action.WORK);
    }

}

运行结果:

机器人充电
机器人工作
人吃饭
人睡觉
人工作
猪进食
猪睡觉

接口

一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
一个类可以同时实现多个接口。
一个类只能继承一个类,但是能实现多个接口。
一个接口能继承另一个接口,这和类之间的继承比较相似。
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。

相关文章

  • 基础问题:抽象类/接口的细节特点

    抽象类 特点:1、方法只有声明,没有实现时,该方法就是抽象方法,需要被abstract修饰。2、抽象类不可以被实例...

  • Java-面向对象-抽象类abstract

    引出抽象类 抽象类的特点 细节问题 1、抽象类一定是个父类? 2、抽象类是否有构造函数? 3、抽象类中是否可以不定...

  • Java  面试常见问题整理

    问题: 重写和重载的区别 接口和抽象类的区别,各有什么特点 谈谈 final, finally, finalize...

  • 接口类&抽象类

    java的接口类和抽象类的特点 java中抽象类的特点: 抽象类和抽象方法必须用关键字abstract修饰 2.如...

  • Java基础知识复习笔记(2)

    1. Java接口和抽象类的区别 语法上: 抽象类可以提供成员方法的实现细节,而接口中只能存在public abs...

  • 接口和抽象类有什么区别

    学习Java基础知识,打通面试关~十三接口与抽象类面试常客:谈谈你对抽象类和接口的理解 接口用interface修...

  • 第一天面向对象OOP

    java基础OOP第一天总结_12_03 1,继承2,抽象类3,接口4,多态 面向对象的继承问题 面向对象的抽象类...

  • 转载面经

    --转自牛客网,作为记录--主要问基础,抽象类,接口,spring,数据库,测试框架等等抽象类和接口:http:/...

  • 2019-01-08

    面试题 1.1 抽象类和接口的区别 抽象类是什么含有abstract修饰符的class即为抽象类。特点:不能创建的...

  • 基础知识一

    一、抽象类与接口 抽象类 特点: 1.抽象类中可以构造方法 2.抽象类中可以存在普通属性,方法,静态属性和方法。 ...

网友评论

      本文标题:基础问题:抽象类/接口的细节特点

      本文链接:https://www.haomeiwen.com/subject/njognctx.html