java中的多态与final关键字

Java多态

1.多态规则(前提): 一种事物的多种形态
  1.类与类之间 要产生联系 继承关系
  2.要有方法重写(没有方法的重写 多态的意义不大)
  3.核心: 父类引用(指针)指向子类空间(声明方式)
  多态时 调用成员变量 和 调用成员方法
  多态 调用成员变量时
  Father f = new Son();
  简单记 编译和运行 都看等号 左边(父类引用)

  当使用父类引用 指向子类空间的时候
  父类的引用 只能访问到 
  子类空间中 属于 父类的那部分(super访问的部分)

   当本类引用 指向本类空间的时候
   本类的引用 可以访问到 整个 空间

    编译时:
     寻找父类中有没有该方法(看等号 左边)
     运行时:
     运行时 调用时子类中重写的方法

多态的弊端:
 * 使用多态声明对象的时候 无法直接调用子类的特有方法
 * 只能通过向下转型后 才能使用子类特有的方法
 * 
 * 多态的好处:
 * 1.代码维护性强(这条建立在 继承的基础上)
 * 2.方法的扩展性强(核心好处)

2.多态在内存中的体现
这里写图片描述

3.final关键字
  final(关键字)(绝育的)
  1.修饰方法 作用 被修饰的 不能被重写
  2.修饰变量 作用 
    被final修饰对象 的 地址不能改变(不能重新指向)
    final 修饰的基本数据类型的变量 不能被重新赋值
  3.修饰类   作用 被修饰类 不能被继承
    //  final修饰成员变量 该成员变量 必须有有效的初值
    //  被final修饰变量 程序中不能被修改 相当于常量
    /*
     * 使用的场景
     * 一般会与 public static 连用
     * 常量命名规范
     * 纯大写 多个单词用下划线 分开
     * 
     */
    public static final int USER_NAME = 100010;

    //  参数也可以被final修饰 相当于修饰的是局部变量
    public void fun(final int i) {
    }
5.//  封装一个方法 创建刀
    //  接收的时候 相当于 WQ wq = new D();向上转型
    //  这时候 只要是武器类的子类 都能使用这个方法
    public static void makeWQ(WQ wq) {
        wq.hit();
        //  判断一下 是不是 刀类型
        //  如果是刀 再进行向下转型
        //  wq instanceof D 判断 wq是否是D 类型
        if (wq instanceof D) {
            //  向下转型
            D d = (D)wq;
            //  调用特有的方法
            d.lianDao();
        }
        //  判断是不棍
        if (wq instanceof G) {
            G g = (G)wq;
            g.lianGun();
        }
    }
    public static void main(String[] args) {
        makeWQ(new D());
        makeWQ(new G());
    }
}
//  武器类
class WQ{
    public void hit() {
        System.out.println("挥武器");
    }
}
//  刀类
class D extends WQ{
    @Override
    public void hit() {
        System.out.println("挥刀 --  砍人");
    }
//  练刀方法
    public void lianDao() {
        System.out.println("练刀");
    }
}
//  棍类
class G extends WQ{
    @Override
    public void hit() {
        System.out.println("挥棍 ---- 敲人");
    }
    //  练棍
    public void lianGun() {
        System.out.println("练棍");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值