Java基础知识(六)1.final关键字;2.方法重写;3.多态中成员访问特点;4.向上转型和向下转型;5.抽象类和接口的区别

1.final关键字

final修饰特点
 修饰类: 被修饰类不能被继承;
 修饰方法: 被修饰的方法不能被重写;
 修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量。

2.方法重写

方法重写是指子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写。
例:
父类:

public class Animal {
    
    
    String name;
    int age;

    //父类中的eat方法
    public void eat() {
    
    
        System.out.println("吃饭");
    }
}

子类:

public class Cat extends Animal {
    
    
    //重写父类中的eat方法
    @Override
    public void eat() {
    
    
        System.out.println("猫吃鱼");
    }
}

Test类:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Cat cat = new Cat();
        cat.name = "Tom";
        cat.age = 5;
        System.out.println(cat.name);
        System.out.println(cat.age);
        cat.eat();
    }
}

运行结果为:
在这里插入图片描述
子类中的@Override表示对父类方法的重写,在对父类方法重写时也可以不加@Override,但若是加了,该符号后面的方法父类中没有,程序就会报错。

3.多态中成员访问特点

多态中成员成员变量编译看左边,运行看左边;
成员方法编译看左边,运行看右边。
例:

class Demo {
    
    
    public static void main(String[] args) {
    
    
        Base base = new SubClass();
        System.out.println(base.x);//成员变量
        System.out.println(base.method());//成员方法
    }
}

class Base {
    
    
    int x = 1;

    int method() {
    
    
        return x;
    }
}

class SubClass extends Base {
    
    
    int x = 2;

    int method() {
    
    
        return x;
    }
}

运行结果为:
在这里插入图片描述

4.向上转型和向下转型

向上转型:父类引用指向子类对象。(多态)
向下转型:把父类的引用强制转换为子类的引用。
向下转型可以解决多态不能使用子类特有的功能的问题。
例:
父类:

public class Animal {
    
    
    String name;
    int age;

    //父类中的eat方法
    public void eat() {
    
    
        System.out.println("吃饭");
    }
}

子类:

public class Cat extends Animal {
    
    
    //重写父类中的eat方法
    @Override
    public void eat() {
    
    
        System.out.println("吃鱼");
    }
  //子类特有功能
    public void catchMouse() {
    
    
        System.out.println("抓老鼠");
    }
}

Test类:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Animal cat1 = new Cat();//向上转型
        Cat cat2 = (Cat) cat1;//向下转型
        cat2.name = "Tom";
        cat2.age = 5;
        System.out.println(cat2.name);
        System.out.println(cat2.age);
        cat2.eat();
        cat2.catchMouse();
    }
}

运行结果为:
在这里插入图片描述

5.抽象类和接口的区别

(1)成员区别
 抽象类:
 成员变量:可以变量,也可以常量
   构造方法:有
   成员方法:可以抽象,也可以非抽象
 接口:
   成员变量:只可以常量
   成员方法:只可以抽象
(2)关系区别
 类与类
   继承,单继承
 类与接口
   实现,单实现,多实现
 接口与接口
   继承,单继承,多继承
(3)设计理念区别
 抽象类被继承体现的是:”is a”的关系;抽象类中定义的是该继承体系的共性功能。
 接口被实现体现的是:”like a”的关系;接口中定义的是该继承体系的扩展功能。

猜你喜欢

转载自blog.csdn.net/weixin_45631296/article/details/102593813