java07——类的继承,final关键字,抽象类、接口、多态

127 阅读3分钟

1、继承

1.1、概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

1.2、写法

class Animal{
    public String name;
    void speak(){
        name = "啦啦啦啦啦";
        System.out.println(name);
    }
}

class Cat extends Animal{
    void printR(){
        name = "100"; // 重新赋值 
        System.out.println(name);
    }
}

1.3、重写父类方法

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。

class Person {
    String str = "200,****这是成员变量";
}

class Car extends Person{
     public void a(){
         str = "hahahhahha";  // 重写字符串
         System.out.println(str);  // hahahhahha
     }

}

1.4、super关键字

super关键字用于访问父类的成员。例如访问父类的成员变量、成员方法和构造方法。

1. 使用super关键字调用父类的成员

  • super.成员变量
  • super.成员方法([arg1,arg2,...])

2. 使用super关键字调用父类的构造方法

  • super([arg1,arg2,...])

例子:

class Apple{
    int cc = 102;
    String name="啦啦啦啦";
    void a(String age){
        System.out.println("我是a函数" + age);
    }
}

class Car extends Apple{
    Car(){
        System.out.println(super.cc);
        super.a("出啊城南1");
    }
}

image.png

2、final关键字

final关键字特性final关键字可用于修饰类、变量和方法,它有“这是无法改变的”或者“终究”的含义,因此,被final修饰的类、变量和方法具有下列特征:

  • final修饰的类不能被继承
  • final修饰的方法不能被子类重写
  • final修饰的变量(成员变量和局部变量)是常量
  • 当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法

3、抽象类

  • 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

  • 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样

  • 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用

3.1、定义抽象类

Java允许在定义方法时不写方法体,不包含方法体的方法称为抽象方法,抽象方法必须使用abstract关键字来修饰,但是在继承的时候需要重写改方法,否则报错:

abstract void fn1();

3.2、注意方法

在定义抽象类时需要注意:

  1. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  2. 抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。

  3. 如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。

  4. 抽象类中的抽象方法只是声明,不包含方法体

  5. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法

  6. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类

// 定义一个抽象类
abstract class xigua{
    private String name = "啦啦";

    // 抽象类可以包含普通方法
    void fn(){
        System.out.println(name);
    }

    // 定义抽象方法
    abstract void fn1();

}

class Apple extends xigua{
    // 抽象类的子类必须给出抽象类中的抽象方法的具体实现
    // 必须重写 否则报错
    void fn1(){
        System.out.println("我是fn1函数");
    }
}


// 抽象类
public class abstDdemo{
    public static void main(String[] args) {
        new Apple().fn1();
    }
}

4、接口

www.runoob.com/java/java-i…

5、多态

www.runoob.com/java/java-p…