疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java随手笔记三之多态


 

  

  多态:

  ---一个对象的多种形态

  实质:父类的引用指向子类对象

  ---前提:必须有继承或者是实现

  class Animal{}

  class Dog extends Animal{}

  main{

  Dog d = new Dog(); //本态

  Animal dog = new Dog(); //多态

  }

  注意:通过多态形式创建的对象,只能访问子父类共有的成员方法,运行结果为子类结果是子类特有的成员方法不能方法。

  虚拟方法调用:

  父类对象调用子类特有的方法

  Student S = new Student("张三",100);

  Person p = new Student("李四",200);

  System.out.println(S.say());

  System.out.println(p.say());

  多态数组 — 在引用类型的数组中,使用多态形式存放对象。

  eg:Person[] person = {new Person("张三", 32),

  new Student("李四", 21, 120, 90.0),

  new Student("王五", 22, 119, 91.5),

  new Teacher("刘老师", 35, 10, "Java EE"),

  new Teacher("张老师", 11)};

  多态参数 — 方法参数列表中的引用类型参数

  instanceof运算符 — 判断一个对象是否为指定类型(形态)

  强制类型转换 — 将对象从一种引用形态转换为另一种引用形态

  对象关联:

  一个对象中使用了另一个对象

  一对一,一对多,多对一

  class test4 {

  public static void main(String[] args){

  Person p = new Person("王五",50);

  method(p);

  Student S = new Student("张三",100);

  method(S);

  Person p1 = new Student("赵四",100);

  method(p1);

  }

  public static void method(Person p){

  if (p instanceof Student){

  System.out.println("教师");

  Student s = (Student)p;

  System.out.println("本态方法调用:"+p.say());

  }else{

  System.out.println("人");

  }

  System.out.println(p.say());

  }

  }

  class Person{

  private String name;

  private int age;

  public Person(){}

  public Person(String name,int age){

  this.name = name;

  this.age = age;

  }

  public String getName(){

  return name;

  }

  public String say(){

  return "姓名:"+name+"年龄:"+age;

  }

  }

  class Student extends Person{

  private int id;

  private double score;

  public Student(String name,int id){

  this(name,20,id,98.5);

  }

  public Student(String name,int age,int id,double score){

  super(name,age);

  this.id = id;

  this.score = score;

  }

  public double getId(){

  return id;

  }

  public String say(){

  return super.say()+"学号:"+id+"分数:"+score;

  }

  }