java学习之面向对象编程--抽象类与接口知识总结

一:抽象类的定义与使用

         抽象类只是在普通类的基础上扩充了⼀些抽象⽅法⽽已,所谓的抽象⽅法指的是只声明⽽未实现的⽅法(即没有⽅法体)。所有抽象⽅法要求使⽤abstract关键字来定义,并且抽象⽅法所在的类也⼀定要使⽤abstract关键字来定义,表示抽象类。

抽象类 (包含抽象方法的类) 使用abstract 关键字修饰 

重点总结:

1.抽象类不能被实例化

2.如果一个非抽象类继承了一个抽象类 则这个类必须重写这个抽象类的抽象方法

3.如果一个抽象类继承了一个抽象类 则这个作为派生类的抽象类可以不用重写抽象类的抽象方法

4.private 和 final 都不能与 abstract 同时出现

5.重写方法的时候:派生类的访问权限要大于等于基类的访问权限

6.抽象类里面可以包含非抽象方法

代码实现范例:

public abstract class Person {
    private int age;
    private String name;                    //属性

    public Person(){
        this.name = name;
    }

    public void Out(){                      //普通方法
        System.out.println("Person普通方法");
    }
    public abstract void Play();          //抽象方法
}

abstract class Student extends Person{    //抽象类继承抽象类不必重写方法


    public void Out2(){
        System.out.println("Student普通方法");
    }
}

class Teacher extends Person{   //普通类继承抽象类必须重写父类的抽象方法

    @Override
    public void Play() {
        System.out.println("老师也玩王者");
    }
}

7.抽象类无法被实例化,只能实例化抽象类的子类

public static void main(String[] args) {
    Person person1 - new Person();    //错误  抽象类无法实例化
    Person person = new Teacher();    //正确  可以实例化抽象类的子类
}

二:接口

接⼝定义:接⼝就是抽象⽅法和全局常量的集合,在Java中接⼝使⽤interface关键字定义
 

重点总结:

1.定义接口使用关键字 interface 接口的名称使用I来表示

2.接口的数据成员默默认为 public static fianl

接口中的方法默认为 public abstract

3.接口内不能有已经实现的方法

4.接口无法进行实例化

5.接口可以继承多个接口,此时的接口拥有了继承的接口里面的抽象方法

6.如果一个抽象类继承了接口,那么这个抽象类中可以不实现接口的方法

但是如果有一个普通类继承了此抽象类,那么这个普通类必须实现所有的抽象方法

代码实现范例:

public interface Drink {

    public static final String  Species = "饮料";
    int Number = 0;
    // 属性默认为 public static final

    public abstract void Putsomething();
    void Putwater();
    // 方法默认为 public abstract

    /*void Putwater(){

    }               //错误  接口中的方法不能被实现*/

}

interface Inews{

    public abstract void Getnews();

}

abstract class Tea implements Drink,Inews{

    abstract void Make();

}

class GreenTea extends Tea{

    @Override
    public void Putsomething() {
        System.out.println("放入茶叶");
    }

    @Override
    public void Putwater() {
        System.out.println("倒入开水");
    }

    @Override
    public void Getnews() {
        System.out.println("等待10分钟");
    }

    @Override
    void Make() {
        System.out.println("制作完成了绿茶");
    }

    public static void main(String[] args) {
        // Drink drink = new Drink();   //错误   接口无法实例化

        Drink drink1 = new GreenTea();
        drink1.Putsomething();
        drink1.Putwater();
        ((GreenTea) drink1).Getnews();
        ((GreenTea) drink1).Make();     //Getnews 和Make 方法都不是Drink类中的方法,
        // 他们来自于 GreenTea 所继承的父类Tea所拥有,如想要调用此方法,需将Drink1强转为
        //GreenTea类型方可调用该方法
    }
}

三:抽象类与接口的区别

重中之重,诸君务记!!!

猜你喜欢

转载自blog.csdn.net/lin140611/article/details/89186206
今日推荐