面向对象二

Posted taozizainali

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象二相关的知识,希望对你有一定的参考价值。

final关键字:

关键字是最终的意思,可以修饰类,成员,变量,成员方法。

修饰类:该类不能被继承

修饰变量:变量就变成的常量,只能被赋值一次

修饰方法:方法不能被重写

final修饰局部变量的问题:

基本类型:基本类型的值不能发生改变。
引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。

final修饰变量的初始化时机

A:被final修饰的变量只能赋值一次。
B:在构造方法完毕前。(非静态的常量)

多态:

多态的前提:

A:要有继承关系。
B:要有方法重写。
其实没有也是可以的,但是如果没有这个就没有意义。
动物 d = new 猫();
d.show();
动物 d = new 狗();
d.show();
C:要有父类引用指向子类对象。
父 f = new 子();

多态中的成员访问特点:

A:成员变量
编译看左边,运行看左边。
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
编译看左边,运行看右边。
D:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)

由于成员方法存在方法重写,所以它运行看右边。

多态中的转型问题:

多态的弊端:
不能使用子类的特有功能。

我就想使用子类的特有功能?行不行?
行。

怎么用呢?
A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)
B:把父类的引用强制转换为子类的引用。(向下转型)

对象间的转型问题:
向上转型:
Fu f = new Zi(); 转成爹就可以用爹的技能。
向下转型:
Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。

例子:

/*
    多态的弊端:
        不能使用子类的特有功能。

    我就想使用子类的特有功能?行不行?
        行。

    怎么用呢?
        A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)
        B:把父类的引用强制转换为子类的引用。(向下转型)

    对象间的转型问题:
        向上转型:
            Fu f = new Zi();
        向下转型:
            Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。
*/
class Fu {
    public void show() {
        System.out.println("show fu");
    }
}

class Zi extends Fu {
    public void show() {
        System.out.println("show zi");
    }

    public void method() {
        System.out.println("method zi");
    }

}

class test1 {
    public static void main(String[] args) {
        //测试
    //向上转型
Fu f = new Zi(); f.show(); // f.method(); //创建子类对象 // Zi z = new Zi(); // z.show(); // z.method(); //你能够把子的对象赋值给父亲,那么我能不能把父的引用赋值给子的引用呢? //如果可以,但是如下
    
     //向下转型
Zi z = (Zi)f; z.show(); z.method(); } }

 

以上是关于面向对象二的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

面向对象怎样理解?

Java面向对象

面向对象

JAVA面向对象程序设计

OpenGL基础学习之二代码基本结构