达内java学习day9

本文主要讲解了Java中的向上造型,即通过超类型的引用指向派生类对象来实现代码复用,以及方法的重写,包括其原则和应用场景。同时,对比了重写与重载的区别,重写发生在父子类中,方法名和参数列表相同,而重载则在同一类中,通过不同的参数列表实现。
摘要由CSDN通过智能技术生成

更更更!!!!!!!!

1.向上造型………………………………代码复用

        (用父类声明一个变量,接受的是子类的对象)

public class UploadDemo {
    public static void main(String[] args) {
        Aoo o1 = new Aoo();
        o1.a = 1;
        o1.show();
        //o1.b = 2;  //编译错误
        //o1.test(); //编译错误,超类不能访问派生类的

        Boo o2 = new Boo();
        o2.b = 1;
        o2.test();
        o2.a = 2;  //正确
        o2.show(); //正确,派生类可以访问超类的

        Aoo o3 = new Boo(); //向上造型
        o3.a = 1;
        o3.show();
        //o3.b = 2;  //编译错误
        //o3.test(); //编译错误,能点出来什么,看引用的类型
    }
}

class Aoo{
    int a;
    void show(){
    }
}
class Boo extends Aoo{
    int b;
    void test(){
    }
}

        超类型的引用指向派生类的对象;

        上面Aoo o3 = new Boo();就是用超类Aoo声明o3然后指向派生类Boo创建的对象

        能点出来什么,看引用的类型;

        能点出来就是说能使用的属性和方法,他能点出来的东西都是所创建的对象本身拥有的东西,Aoo o3 = new Boo();中O3所点出来的东西,都是Boo类中的对象所拥有的。

                多种角色都干一样的事情的时候,可以用多种角色的统一造型到超类数组中,实现代码复用。然后通过这个超类创建不同派生类的对象。是为了封装相同的属性和方法而创建了超类。

                个人总结思维:首先思考的是对象,我们需要什么东西,然后这个东西有什么属性,方法(行为),然后把属性和方法组合在一起封装在一个类中。然后把很多对象比较,把相同的属性和方法提取出来,封装在另一个类中,这个类就成了这些对象的类的超类(父类)。所以思维上是先有对象,再有类,再有类的超类。

eg:学生/老师/医生都是输出名字+问号……干的事情都一样,就可以将学生/老师/医生统一造型到Person数组中,这样一个for即可……代码复用(具体实例看潜艇日记)

 2.方法的重写(override/overriding)重新写、覆盖

        发生在父子类中,方法名相同,参数列表相同

        重写方法被调用时,看对象的类型

class 餐馆{
    void 做餐(){ 做中餐 }
}
//1)我还是想做中餐-----------------不需要重写
class Aoo extends 餐馆{
}
//2)我想改做西餐-------------------需要重写
class Boo extends 餐馆{
    void 做餐(){ 做西餐 }
}
//3)我想在中餐基础之上加入西餐--------需要重写(先super中餐,再加入西餐)
class Coo extends 餐馆{
    void 做餐(){
        super.做餐();
        做西餐
    }
}

                   在超类中已经存在的方法,但是在派生类中需要使用时,可以使用重写,重写的可以更改以前的方法,也可以在以前的东西上增加功能。也可以不重写。

                重写遵循“两同两小一大”原则:

        两同:

                方法名相同

                参数列表相同

        两小:

                派生类方法的返回值类型小于等于超类的方法的

                        void和基本类型时,必须相等

                        引用类型时,小于或等于(超类大,派生类小)

class Coo{
    void show(){}
    double test(){ return 0.0; }
    Student say(){ return null; }
    Person sayHi(){ return null; }
}
class Doo extends Coo{
    //int show(){ return 1; } //编译错误,void时必须相等
    //int test(){ return 0; } //编译错误,基本类型时必须相等
    //Person say(){ return null; } //编译错误,引用类型时必须小于或等于
    Student sayHi(){ return null; } //正确,Student小于Person
}

                派生类方法抛出的异常小于或等于超类方法的(不知道原因)

        一大:

                派生类方法的访问权限大于或等于超类的方法的(访问权限以后具体说)

3重写与重载的区别:

重写:发生在父子类中,方法名相同,参数列表相同

重载:发生在同一类中,方法名相同,参数列表不同

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值