分享

多态的概述和前提条件

 樱花梦_张艺馨 2016-08-31
/*
多态:同一个对象(事物),在不同时刻体现出来的不同状态
多态的前提:
A:要有继承关系
B:要有方法重写
C:要有父类引用指向子类对象
父 f = new 子();
 
用代码体现一下多态:
多态中的成员访问特点:
A:成员变量:
     编译看左边,运行看左边
B:构造方法:
        创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法:
     编译看左边,运行看右边。(因为方法存在复写/覆盖,父类方法被子类盖掉了)
D:静态方法:
     编译看左边,运行看左边
(静态和类相关,算不上重写,所以访问的是左边的)
*/
==========================构造方法 验证=========================
 class Person{
 public Person(){
   System.out.println("父类构造方法");
 }
 public void show(){
  System.out.println("父类方法");
 }
}
class Student extends Person{
public Student(){
 System.out.println("子类构造方法");
}
  public void show(){
   System.out.println("子类方法");
 }
}
class Test{
 public static void main(String [] args){
  Person p =new Student();
 
 }
}
结果:
父类构造方法
子类构造方法
=========================成员变量 验证一============================
 class Person{
   int number = 100;
 public Person(){
   System.out.println("父类构造方法");
 }
 public void show(){
  System.out.println("父类方法");
 }
}
class Student extends Person{
 int number = 1000;
 int number2 = 200;
public Student(){
 System.out.println("子类构造方法");
}
  public void show(){
   System.out.println("子类方法");
 }
}
class Test{
 public static void main(String [] args){
  Person p =new Student();
  System.out.println(p.number);
  System.out.println(p.number2);
 }
}
结果:
编译报错:
Test.java:24: 找不到符号
符号: 变量 number2
位置: 类 Person
                System.out.println(p.number2);
===============================成员方法 验证二=======================
 class Person{
   int number = 100;
 public Person(){
   System.out.println("父类构造方法");
 }
 public void show(){
  System.out.println("父类方法");
 }
}
class Student extends Person{
 int number = 1000;
 int number2 = 200;
 public Student(){
  System.out.println("子类构造方法");
 }
  public void show(){
   System.out.println("子类方法");
 }
}
class Test{
 public static void main(String [] args){
  Person p =new Student();
  System.out.println(p.number);
 }
}
结果:
父类构造方法
子类构造方法
100
=========================成员方法 验证===========================
  class Person{
   int number = 100;
 public Person(){
   System.out.println("父类构造方法");
 }
 public void show(){
  System.out.println("父类方法");
 }
}
class Student extends Person{
 int number = 1000;
 int number2 = 200;
 public Student(){
  System.out.println("子类构造方法");
 }
  public void show(){
   System.out.println("子类方法");
 }
public void method(){
System.out.println("子类method方法");
}
}
class Test{
 public static void main(String [] args){
  Person p =new Student();
  p.show();
  p.method();
 }
}
结果:
编译出错
Test.java:27: 找不到符号
符号: 方法 method()
位置: 类 Person
                p.method();
============================成员方法 验证二==========================
 class Person{
   int number = 100;
 public Person(){
   System.out.println("父类构造方法");
 }
 public void show(){
  System.out.println("父类方法");
 }
}
class Student extends Person{
 int number = 1000;
 int number2 = 200;
 public Student(){
  System.out.println("子类构造方法");
 }
  public void show(){
   System.out.println("子类方法");
 }
public void method(){
System.out.println("子类method方法");
}
}
class Test{
 public static void main(String [] args){
  Person p =new Student();
  p.show();
 }
}
结果:
父类构造方法
子类构造方法
子类方法

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多