java基础day11 多态、final关键字

1多态性:即:对象的多态性。对象属于子类,同时也属于父类。(我是人,然后才是中国人)

2写法格式:父类名称 对象名=new 子类名称();或 接口名称 对象名=new 实现类名称();

                        也就是父类引用指向子类对象 翻译:一个中国人被当做人来看待

3多态成员变量的访问特点:(重名状态下)

           1直接通过对象名查找成员变量:看等号左边是谁,就从谁的类里面找,没有则向上查找

           2间接通过成员方法查找:new的是谁就从谁找,覆盖重写后从覆盖重写处找

4多态中成员方法的使用特点:编译错误看等号左边找原因,运行成功看等号右边找结果

5多态的作用:以老板的眼光看员工:我不管你是属于什么工种,我只知道你是我的员工

                        所以调用方法的时候,左边的“员工父类”都不用变。员工 名字=new 工种

6对象的转型:1向上转型(就是一个多态):父类名称 对象名=new 子类名称();

                         等号右侧创建一个子类对象当做父类来看待,向上转型一定是安全的

                        2向下转型(还原操作):子类名称 对象名=(子类名称)父类对象,

                         从哪来回哪去,从哪个子类向上的,就必须向下还原到那个子类。否则

                          就会出现运行错误classcast exception“类转换错误”(但编译不会提示有错误)

7instance of关键字:格式 :对象名  instanceof  类名称 其结果是一个布尔值。判断是不是从后面

                                  的类中所向上转型而来的。假如实现方法需要一个animal参数,而我们并

                                  不知道animal具体是什么的时候,就需要instanceof关键字对传入参数进行

                                  判断,然后再执行相对应的方法

案例1 笔记本电脑的usb接口

//创建一个电脑类 电脑类使用USB接口
package ComputerUSB;

public class LapTop {
    public void poweron(){
        System.out.println("打开电脑");
    }
    public void poweroff(){
        System.out.println("关闭电脑");
    }
    public void shiYongSheBei(USB usb){
        //注意!是将usb接口父类传进来。因为电脑并不需要知道要用的具体是哪个设备
        usb.open();//打开设备
        if(usb instanceof Mouse){//判是否来自Mouse实现类?
            Mouse mouse=(Mouse)usb;//是,将该usb参数向下转型
            mouse.click();//调用方法
        }else if (usb instanceof KeyBoard){//判是否来自Keyboard实现类?
            KeyBoard keyBoard=(KeyBoard)usb;//是,将该usb参数向下转型
            keyBoard.type();//调用方法
        }
        usb.close();//关闭设备
    }
}

//创建USB接口并定义其中的抽象方法
package ComputerUSB;

public interface USB {
    //此处用抽象类方法,因为不知道具体是哪个设备
    public abstract void open();//打开设备
    public abstract void close();//关闭设备
}

//创建鼠标实现类,并从USB中覆盖重写抽象方法
package ComputerUSB;

public class Mouse implements USB {
    @Override
    public void open() {
        System.out.println("打开鼠标");
    }
    @Override
    public void close() {
        System.out.println("关闭鼠标");
    }
    public void click() {
        System.out.println("点击鼠标");
    }
}
//创建键盘实现类,并从USB中覆盖重写抽象方法
package ComputerUSB;

public class KeyBoard implements USB {
    @Override
    public void open() {
        System.out.println("打开键盘");
    }
    @Override
    public void close() {
        System.out.println("关闭键盘");
    }
    public void type() {
        System.out.println("键盘输入");
    }
}
//执行代码
package ComputerUSB;

public class Demo01Computer {
    public static void main(String[] args) {
        LapTop computer=new LapTop();
        computer.poweron();

        USB mouseusb=new Mouse();//将mouse类向上转型,以备LapTop进行调用
        computer.shiYongSheBei(mouseusb);

        KeyBoard keyBoard=new KeyBoard();
        computer.shiYongSheBei(keyBoard);
        /*此处keyboard实现类可以直接调用,因为keyboard参数是属于(小于)接口USB的,
        所以电脑自动对keyboard进行了安全的向上转型*/

        computer.poweroff();
    }
}

二、final关键字(可以修饰:1类2方法3局部变量4成员变量)

1final用来修饰类:public final class 类名称{   };含义:当前类不能有任何子类,因此其中的所有

                                方法也不能进行覆盖重写(abstract和final冲突)

2final用来修饰成员方法:public final 返回值类型 方法名称(参数列表){   };该方法就是一个

                                        最终方法,不能进行覆盖重写(abstract和final冲突)

3final用来修饰局部变量:final 数据类型 数据名称=变量值  那么一次赋值 终生不变

                                        注:当此时的数据类型为基本数据类型时,其中的数值永不变。

                                               但是当数据类型为引用类型时,不能改变的是其中的地址值,

                                               然而地址值中存储的数据还是可以改变的

4final用来修饰成员变量:1由于成员变量具有默认值,所以用了final之后必须手动赋值

                                ​​​​​​​        ​​​​​​​ 2final成员变量可直接赋值,或通过构造方法赋值,二者选其一

5四种权限修饰符的调用范围:

6每种类所能使用的修饰符:外部类:public;(default)

                                             成员内部类:public;protected;(default);private

                                             局部内部类:什么都不能写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值