面向对象-抽象类、接口、内部类

1.抽象类

  java中一个没有方法体的方法叫做抽象方法,而类中有抽象方法,该类只能定义为抽象类。

  a.抽象类特点

    1)抽象类和抽象方法都要用abstract关键字修饰。

      格式:

      abstract class 类名{}

      public abstract void 方法名();

    2)抽象类不一定有抽象方法,但抽象方法的类一定在抽象类。

    3)抽象类不能实例化

      抽象类多态,由具体的子类实例化。

    4)抽象类的子类

      要么是抽象类要么重写抽象类中所有的抽象方法。

  b.老师教课案例

    老师案例 具体事物:19级老师,20级老师   共性:姓名,年龄,讲课。

    abstract class Teacher{

      private String name;

      private int age;

      public Teacher(){}

      public Teacher(String name,int age){

        this.name = name;

        this.age = age;

      } 

      public void setName(String name){

        this.name = name;

      }

      public void setAge(int age){
        this.age = age;

      }

      public void getName(){

        return name;

      }

      public void getAge(){

        return age;

      }

      public abstract void teacher();

    }

    class NineteenTeacher extends Teacher{

      public NineteenTeacher(){}

      public NineteenTeacher(String name,int age){

       super(name,age);    

      }

      @override

      public void teacher(){

        System.out.println("这是19级老师教学语文。")

      }

    }

    class TwentyTeacher extends Teacher{

      public TwentyTeacher(){}

      public TwentyTeacher(String name,int age){

        super(name,age)    

      }

      @override

      public void teacher(){

        System.out.println("这是20级老师教学英语。")

      }

    }

  public class Test{   

    public static void main(String[] args){

      Teacher t1 = new NineteenTeacher(name:"小王",age:18);

      t1.teacher();

      Teacher t2 = new TwentyTeacher(name:"小刘",age:19);

      t2.teacher();

    }

  }

2.接口

  为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现。

  a.接口特点

    1)接口用关键字interface表示   

      格式:

      interface 接口名 {}

    2)类实现接口用implements表示   

      格式:

      class 类名 implements 接口名 {}

    3)接口不能实例化 

       按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。

     4)接口的子类

      要么是抽象类 要么重写接口中的所有抽象方法。

    注意:成员变量只能是常量切默认修饰符 public static final

3.引用数据类型的数据参数和返回值。

    a.数据参数

    类:当类作为方法形式参数的时候,实际上需要的是该类的对象。

    class Teacher{

      public void show(){

        System.out.println("我是老师。");

      }

    }

    class TeacherTest{

      public void fun(Teacher teacher){

        teacher.show();

      }

    }

    class Test2{   

      public static void main(String[] args){

        TeacherTest t3 = new TeacherTest();

        Teacher a = new Teacher();

        t3.show(a);

      }

    }

    抽象类:实际上需要的是该抽象类的子类的对象。

    接口:实际上需要的是该接口具体实现的类。

    b.返回值

    类:实际上需要返回一个该类的对象。

    class Student{

      public void show(){

        System.out.println("我是学生。");

      }

    }

    class StudentTest{

      public Student show2(){

        return new Student();

      }

    }

    class Test{

      public static void main(String[] args){

        StudentTest s1 =  new StudentTest();

        Student s2 =  s1.show2();

        s2.show();

      }

    }

    抽象类:返回的是一个该抽象类的一个具体子类的对象。

    接口:返回的是一个该接口的一个具体实现的类的对象。

    

posted @ 2022-03-27 22:15  俊熙777  阅读(37)  评论(0编辑  收藏  举报