zoukankan      html  css  js  c++  java
  • java篇 之 多态

    2018-9-28

    多态:

    重载也称为静态多态(静态在编译阶段就能确定)(动态是跟运行时挂钩)

    尽量去选择关系轻的,降低耦合度(紧密度)

    内聚:

    减少与外界的联系,降低与其他对象和类的联系

    对象与对象的关系:高内聚,低耦合

    继承本身就是打破封装的(因为它要调用外界的东西)(封装是内敛的,阻止访问)(封装与继承是相互冲突的)

    重写规则:

    1. 发生在有继承关系的类之间(同一类就是重载了)
    2. 相同的方法名,参数列表,返回类型
    3. 可见性(public,protected,private)不能被缩小
    4. 异常不能被放大
    5. 规则与c++中不一样
    6. 静态类型不能被重写

    类型转换

    都是按地址空间大小解析

    子类-->父类(隐式转换,自动截取,按父类地址空间大小解析,多出的部分截取不解析,但是当Person p = new Lawyer(“kb”,2);再转回子类时不会出错,但还是要instanceof语句)

    经常用父类引用去引用子类对象!!!(左边是引用(p),右边是对象(lawyer))

    父类-->子类(可能会有错,必须强制转换,按子类空间大小解析,(少的部分用乱码解析给子类,会有错),使用者自己承担问题,用instanceof语句)

    if(p instanceof Lawyer)(可以转才执行下一句)

    静态类型(永远不会变化)决定编译能否通过

    动态类型,实际指向的类型(执行的时候可变)由动态类型决定的方法调用称之为多态

    Byte b = (byte) 10;

    b--- byte(静态类型永不会变)

    10 ----int(动态类型)

    多态:

    同一类域,不同对象,相同行为,不同表现形式

    成为多态的语法前提:

    1. 有继承层次(子类extends 父类 )
    2. 方法重写
    3. 等号左边的引用要一致,父类声明的变量去引用子类的对象

        

    this:指向当前调用者(本身)谁用就是谁

    方法重载的要求是什么?

    方法名相同

    参数列表不同(参数类型不同或者参数个数不同)

    public class A{

    public void test1(){

    System.out.println("A test1");

    }

    }

    public class B extends A{

    public void test1(){

    System.out.println("B test1");

    }

    public void test2(){

    System.out.println("B test2");

    }

    public static void main(String[] args){

    A a = new B();

    a.test1();

    a.test2(); //a的静态类型没有test2方法,所以编译不能通过,必须有, //b中才能重写,调用

    }

    }

    编译运行后的结果是什么?为什么?

    编译报错,变量aA类型的,无法调用到test2方法,因为test2方法是B类中独有的

    分析:a的静态类型是A,动态类型是B,首先静态编译,有test1方法,然后动态调用B中的test1,但是A中没有test2,编译报错

  • 相关阅读:
    Memo
    list查询记录时页面变成空白
    get the mail ids of the group members
    ui action(server side) change column value
    catalog item 时间按照指定形式输出
    select box 联动
    lookup select box和select box 联动
    函数二--递归
    函数一
    指针3
  • 原文地址:https://www.cnblogs.com/wskb/p/10811273.html
Copyright © 2011-2022 走看看