• Java知识点梳理——多态


    1、定义:多态是同一个行为具有多个不同表现形式或形态的能力,即一个接口不同的实例执行不同的操作;

    2、优点:消除类型之间的耦合关系、可替换性、可扩展性、接口性、灵活性、简化性;

    3、多态存在的3个必要条件

      a、继承:在多态中必须存在有继承关系的子类和父类;

      b、重写:子类对父类中的某些方法重新定义,在调用这些方法时就会调用子类中的方法

      c、父类引用指向子类对象(向上转型):需要将子类引用赋给父级对象,才能调用父类和子类的方法;

     1 public class Test {
     2     public static void  main(String [] args){
     3         Person pc = new Chinese(); // 父类引用指向子类对象
     4         pc.sayHello(); // 调用Chinese的 sayHello 输出——>您好
     5         Person pa = new American(); // 向上转型
     6         pa.sayHello(); // 输出——>Hello
     7     }
     8 }
     9 
    10 public abstract class Person {
    11     public void sayHello();
    12 }
    13 
    14 public class Chinese extends Person {
    15     public void sayHello()
    16     {
    17         System.out.println("您好");
    18     }
    19 }
    20 
    21 public class American extends Person {
    22     public void sayHello()
    23     {
    24         System.out.println("Hello");
    25     }
    26 }

     注:使用多态方式调用方法时,首先检查父类中有没有该方法,没有编译报错,有则会去调用子类的同名方法(重写父类的方法);由于指向子类的父类引用向上转型了,它只能访问父类中拥有的属性和方法,若子类重写了父类的某些方法,在调用该些方法时,必定使用子类中的方法(虚方法调用);
      声明为父类类型的引用变量只能调用父类中的方法,如果此变量实际引用的是子类对象,而子类对象中覆盖(重写)了父类的方法,这时父类对象调用的是子类中的方法(要想调用父类中被重写的方法,则必须使用关键字super),这种机制就称为虚方法调用

    4、多态实现方式:重写、接口抽象类和抽象方法

    5、Java封装:通过对类的私有属性设置公共的访问方法(getter和setter方法)实现对其私有属性访问的目的,隐藏了类的具体实现,提高对象数据的安全性,还可以在外部调用不变的情况下自由修改内部实现代码;

     1 public class Person{
     2     
     3     private String name;  // 私有属性只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏
     4  5     public String getName(){  // 私有属性对外的公共取值方法
     6       return name;
     7     }
     8 ​​
     9     public void setName(String name){  // 私有属性对外的公共赋值方法
    10       this.name = name;
    11     }
    12 }

     注:public 方法是外部类访问该类成员变量的入口,任何要访问类中私有成员变量的类都要通过这些getter和setter方法;
       this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突;

    6、Java重写与重载

      重写:子类对父类允许访问的方法进行重新编写实现,返回值和参数都不能变,即外壳不变,核心重写,重写是子类与父类的一种多态性表现

      重载:在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同,重载是一个类的多态性表现
      

     1 public class Person {
     2     public void sayHello(){
     3         System.out.println("sayHello");
     4     } 
     5     // 重载sayHello方法
     6     public void sayHello(String name){
     7         System.out.println(name + "sayHello");
     8     }
     9 }
    10 
    11 public class Chinese extends Person {
    12     // 重写父级sayHello方法
    13     public void sayHello(){
    14         System.out.println("您好");
    15     }
    16 }
  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/lbxx/p/9366155.html
Copyright © 2020-2023  润新知