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;

}

}

时间: 2024-11-08 19:22:38

java随手笔记三之多态的相关文章

Java基础笔记-抽象,继承,多态

抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstract修饰,在抽象类中的方法不写abstract也默认的是抽象方法. 3.不能用new来创建对象,调用抽象方法没意义. 4.抽象类中的方法被使用,必须由子类覆写其所有的抽象方法后,才能建立子类对象进行调用. 如果子类只覆盖了部分的抽象方法.那么该子类还是一个抽象类. 5.抽象类不可以被实例化. 继承

java学习笔记之面向对象多态

面向对象三大特性之多态 一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同样可以描述一个事物的多种形态,java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口) 变量赋值. 父类的引用变量指向子类对象.多态的前提需要有继承关系或者是实现关系,否则没法完成多态.在使用

java随手笔记二之继承

继承: extends 从一个类中创建出新类,新类---子类,原有的类---父类,超类,基类 子类继承父类,子类就拥有了父类中的内容(除构造器外),同时子类还可以拥有自己特有的内容. 一个父类可以有多个子类,一个子类只能有一个父类---java单继承. 优点: 1.创建更特殊的类型 2.消除代码的重复问题 3.便于可维护性和提高扩展性 子类继承父类,包括私有成员,但是在子类中不能直接访问继承的私有成员,必须通过公共访问方式. 方法覆盖/重写: 在子类中,出现了和父类相同的方法,但是方法体内容不同

Java学习笔记六:多态

多态通过分离“做什么”和“怎么做”,从另一个角度讲接口和实现分离开来.多态的作用是消除类型之间的耦合关系,多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一个基类导出而来的. 1.方法参数中传入基类,可以使子类方便调用 class Instrument { public void play(Note n) { System.out.println("Instrument.play()"); } } class Wind extends Instrument {

我的java学习笔记(8)关于多态

关于多态 1.在java程序语言中,对象变量是多态的. 2.不能讲一个超类的引用赋给子类变量. 3.private方法,static方法,final方法或者构造器,那么编译器将可以准确的知道应该调用哪个方法,我们将这种调用方式称为静态绑定. 4.动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对城乡惊喜扩展. 5.在覆盖一个方法的时候,子类方法不能低于超类方法的可见性. 6.不允许扩展的类被称为final类. 7.如果将一个类声明为final,只用其中的方法自动的成为final,而

黑马程序员——JAVA学习笔记三(面向对象)

1,    面向对象设计程序(oriented object pragraming)  ,其程序是有对象组成,只要对象能满足要求,就不需要关心其功能的具体实现.面向对象的特征:封装(encapsulation)继承(inherence)多态(polymorphism). 2,    类是对事物的属性和行为的描述,构造对象的模板和蓝图.对象是类的实例,它具有三个特征:行为(behavior)状态(state) 对象标示(identity如何辨别具有相同状态和行为的对象).成员函数默认有一个隐含参数

Java学习笔记--继承和多态(上)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayLis的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆盖

JAVA学习笔记(三十二)- 字符流 FileReader & FileWriter

标题 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream;

Java学习笔记--继承和多态(下)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayList的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆