码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象二

时间:2019-04-15 20:24:06      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:关系   问题   method   int   向上转型   string   print   end   对象   

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(); } }

 

面向对象二

标签:关系   问题   method   int   向上转型   string   print   end   对象   

原文地址:https://www.cnblogs.com/taozizainali/p/10712495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!