首页 > 其他 > 详细

抽象类和接口的区别

时间:2021-06-05 18:19:39      阅读:11      评论:0      收藏:0      [点我收藏+]

一.抽象类

在多态中父类方法体是多余的,永远不可能执行,所以出现了抽象方法,又因为类中含有抽象方法则该类必须为抽象类;
删除父类方法方法体-->抽象方法-->一个类含有抽象方法-->则该类必须为抽象类

Mammal抽象类

package com.lanou.util;

//关键字 abstract可以修饰类和方法
/**
 * 哺乳动物抽象类
 * abstract修饰的类称为抽象类
 */
public abstract class Mammal {
    /**
     * abstract修饰的方法叫做抽象方法,
     * 注意:抽象方法只有声明部分,而没有具体的方法体。
     */
    public abstract void move();
    /**
     * 抽象方法:吃
     */
    public abstract void eat();

    public void  sleep(){
        System.out.println("躺着睡觉");
    }
}

package com.lanou.util;

/**
 * 鲸鱼类继承哺乳动物抽象类
 */
public class Whale extends Mammal{
    /**
     *实现父类Mammal中的move抽象方法
     */
    @Override
    public void move() {
        System.out.println("鲸鱼靠鱼鳍移动......");
    }

    /**
     * 实现父类Mammal中的eat抽象方法
     */
    @Override
    public void eat() {
        System.out.println("鲸鱼吃虾和鱼......");
    }

    /**
     * 抽象类不能被直接实例化,即不能使用关键字new来创建该抽象类的对象
     d
     * @param args
     */
//    public static void main(String[] args) {
//        new Mammal();
//    }
}

特点:

1.抽象类可以有构造方法,但不能创建对象

2.抽象类可以没有抽象方法

3.抽象方法不可以用static.final修饰 访问权限不能用private修饰

4.抽象类的子类必须实现抽象类所有的抽象方法,否则子类也必须使抽象类

二.接口

Java接口是抽象方法的集合

需求:设计教师、程序员类,教师能教课,程序员可以写代码,他们都会开车,都会做饭。提示: 开车定义在Driving接口中,做饭定义在Cooking接口中,让教师和程序员实现2个接口。

父类Person

package com.lanou.util;

public class Person {
    private String name;
    private  int age;
    //get set方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Person() {
        super();
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    //toString方法
    public String toString() {
        return "姓名:" + name + ",年龄:" + age;
    }
    public void showinfo(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}

在java中,使用interface关键字来定义接口

接口Cooking

package com.lanou.util;
//接口Cooking
public interface Cooking {
    public abstract void cook();
}

接口Driving

package com.lanou.util;
public interface Driving {
    //开车
    public abstract void dirve();
}

接口的实现类:实现接口的类称为接口的实现类

教室Teacher类

package com.lanou.util;

public class Teacher extends Person implements Driving,Cooking {
    public Teacher(){
        super();
    }
    public Teacher(String name,int age){
        super(name,age);
    }
    //教课
    public void teach(){
        System.out.println(this.getName()+"正在授课");
    }
    //Cooking接口中的方法
    @Override
    public void cook() {
        System.out.println("教师做饭");
    }
    //Dirving接口中的方法
    @Override
    public void dirve() {
        System.out.println("教师开车");
    }

}

程序员Programmer类:

package com.lanou.util;

public class Programmer extends Person implements Cooking,Driving{
    public  Programmer(){
        super();
    }
    public Programmer(String name,int age){
        super(name, age);
    }
    //写程序
    public void writeProject() {
        System.out.println(this.getName() + "正在写项目");
    }

    //Cooking接口中的方法
    @Override
    public void cook() {
        System.out.println("程序员做饭");
    }
    //Driving接口中的方法
    @Override
    public void dirve() {
        System.out.println("程序员开车");
    }
}

特点

1.一个类可以实现多个接口,接口与接口之间用逗号隔开,

2.接口没有构造方法(因为接口成员变量三Buff加身)

3.变量:public static final

总结区别

抽象类

1.关键字:abstract

2.成员变量:可以包含任意合法成员变量

3.可以有构造方法

4.方法:可以包含任意合法方法(包括各种访问级别的非抽象类方法和非抽象方法实例,也包含除private的非静态抽象方法)

5.如何实现抽象类的方法:通过继承实现抽象类中的所有抽象方法(若不想实现抽象类的所有抽象方法,除非你本身也是个抽象类)

6.是否存在继承:不存在 ,只能继承有一个

接口

1.关键字:interfae

2.成员变量:只能包含公开静态常量(默认public static final)

3.没有构造方法

4.方法:JDK7及其以下版本JDK只能包含公开且抽象的方法(默认由public abstract修饰),而JDK8开始可以包含default、static修饰的非抽象方法

5.如何实现抽象方法:通过implements接口实现接口中的抽象方法

6.是否存在多继承:存在因为一个接口可以继承多个接口

抽象类和接口的区别

原文:https://www.cnblogs.com/fzf007007/p/14852762.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!