【面向对象】final关键字,多态,多态访问成员的特点(重点),.多态的弊端,抽象类,方法重写的注意事项

本文深入探讨了Java中的final关键字,包括其用于防止类、变量和方法被继承或重写的特点。接着介绍了多态的概念、前提、访问成员的特点以及存在的弊端。还讨论了抽象类和抽象方法,强调抽象类不能被实例化,以及子类继承抽象类时重写方法的规则。最后,提到了方法重写的一些注意事项。
摘要由CSDN通过智能技术生成

继承

1.final关键字

有些时候,我们不想让子类覆盖重写父类中的方法或者功能,只能让子类去使用。
那怎么办呢?

(1) 定义

针对这个情况,java提供了一个关键字:final

    final:最终的意思。可以修饰类,成员变量,成员方法。

(2) final的特点:

final:最终的的意思。它可以修饰类,成员变量,成员方法

特点:
1、修饰类,类不能被继承
2、修饰成员变量,变量变常量,并且只能赋值一次,在构造方法完毕之前赋值即可。
常量:
字面值常量
自定义常量:被final修饰变量变成自定义常量
3、final修饰成员方法:方法不能被重写

举例:

       public class FianalDemo02 {
   
    public static void main(String[] args) {
   
        Z z=new Z();
        z.show();
        System.out.println(z.num);
    }
}
class X{
   
    int num=10;
    final int num1=100;//变量变常量
    X(){
   
        System.out.println("父类构造方法");
    }
    public final void show1(){
   
        System.out.println("111");
    } //此方法不能被重写
    public void show(){
   

        //num1=900;//无法为num1赋值,会报错
        System.out.println(num);
        System.out.println(num1);
    }
}
 final class Y{
   //此类不能被Z,X继承

 }
class Z extends X{
   
    @Override
    public void show() {
   

        super.show();
        num=500;
      //  num1=800;//无法为num1赋值,会报错
    }
    

}

(3).final修饰引用数据类型时

面试题:
final修饰局部变量

1、在方法内部,修饰基本数据类型的变量,变量值只能赋值一次,不能发生改变
2、final修饰引用数据类型的变量呢?
引用的地址值不可以发生改变你,但是该对象的堆内存中的值是可以发生改变的。

举例:

        class Student {
   
    int age = 10;
}
public class FinalDemo03{
   
    public static void main(String[] args) {
   
        int x=100;
        x=300;
        System.out.println(x);

        final int y = 200;
//        y = 400; //无法为最终变量y分配值
        System.out.println(y);
        Student student = new Student();
        System.out.println(student.age);

       final Student s2 = new Student();//s2为被final修饰
       //的引用数据类型
        System.out.println(s2.age);

        s2.age = 1000;//由于final修饰的是s2,
//它是一个地址值,所以s2.age可以被改变,而因为s2被final修饰s2这
//个地址值是不可以被改变的
        System.out.println(s2.age);
        System.out.println("==========================");
//        s2 = new Student(); //无法为最终变量s2分配值
    }
}

多态

1.多态的引入

多态:某一事物,在不同时刻表现出来的不同状态

    举例:
        水:
            固态、液态、气态
            固态的水是水、液态的水也是水、气态的水也是水
        水果:
            波罗蜜、香蕉、榴莲
            波罗蜜是水果、香蕉是水果、榴莲是水果
            水果是波罗蜜。// 反过来说是有问题的
        动物:
            狗、虎、猫、大象
            狗是动物,这么说是没问题的
            动物是狗,这么说是不可以。

   说了这么多,总结出一个思想,这个思想叫做:多态
   通过观察例子发现,要想有多态,就必须要继承,继承是多态的前提。

2.多态的前提

多态的前提:
1、要有继承关系
2、要有方法的重写。
其实没有重写也是可以的,但是不重写就没有意义
动物都有吃这个方法,但是每个具体的动物吃的实现不一样,变现出不同动物的特有属性
3、要有父类的引用指向子类对象
父类名 f = new 子类名(…);

3.多态访问成员的特点(重点)

(1)、成员变量
编译看左,运行看左
(2)、构造方法
创建子类对象的时候,先访问父类中的构造方法,对父类的数据先进行初始化
(3)、成员方法
编译看左,运行看右。
因为成员方法存在重写,所以访问看右边

(4)、静态成员方法
编译看左,运行也看左。
由于被static修饰的成员都是与类相关的,这里不是重写,所以运行的时候,访问的还是左边的。

举例:

public class DuoTaiDemo04 {
   
    public static void main(String[] args) {
   
        Father4 f=new Son4();
        System.out.println(f.num);//多态访问成员变量编译看左,
        //运行看左,结果为:100
        f.show();//多态访问成员方法  编译看左,运行看右。访问子
        //类的
        f.show1();//多态访问静态成员方法 编译看左,运行也看左
        //因此会执行父类中的静态成员方法


    }
}
class Father4{
   
    int num=100;
    Father4(){
   
        System.out.println("这是父类的构造方法");
    }
    public void show(){
   
        System.out.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值