java静态数组与动态数组,java定义多个数组
00-1010多态性概述1。向上转型2。向下转换多态数组Arrtest.javaPerson.javaStudent.javaTeacher.java多态数组关键字Arrtest.javaPerson.javaStudent.javaTeacher.java的向下转换实例
00-1010多态性概念:所谓多态性是指程序中定义的引用变量所指向的具体类型和引用变量发出的方法调用不是在编程时确定的,而只是在程序运行时确定,即一个引用变量将指向哪个类实例对象,引用变量发出的方法调用是在哪个类中实现的方法,必须在程序运行时决定。由于具体的类是在程序运行时才确定的,所以引用变量可以在不修改源代码的情况下绑定到各种类实现,这就导致了引用变量调用的具体方法的改变,即不修改程序代码就可以改变程序绑定的具体代码,使程序可以选择多种运行状态,这就是多态性。
多态性存在的三个必要条件
1.必须有继承关系(实现接口也是继承关系)
2.重写方法。
3.应该有一个指向子类对象的父类引用。
注意:
1.运行方法取决于运行类型,属性取决于编译类型。
2.调用方法中的属性,没有特殊情况就是这种属性。
3.如果类型中没有被调用的方法,则执行向上查询。
00-1010 1.对象的向上转换实际上是多态书写:
格式:父类名对象名=新子类名();
含义:在右侧创建了一个子类对象,它被用作父类。
Person person=新生();
创建一个学生对象,把它当人看,没问题。此时编制类型为人,跑步类型为学生;
注意:向上转换必须安全。从小范围到大范围,从小范围的猫到更大范围的动物。
目录
2.一个物体的向下变形实际上是一个减少的动作:
格式:子类名称对象名称=(子类名称)父类对象;
含义:将子类恢复到原来的子类。
猫猫=(猫)动物;//本来是猫,转化成动物,又还原回原来的猫。注意:
形容词(adjective的缩写)必须确保对象最初是作为猫创建的,这样才能将其转化为猫。
B.如果对象在创建时不是一只猫,现在必须将其转换为一只猫,它将报告一个错误。
00-1010创建polyArr包
多态概述
package com . polyar;class arr test { public static void main(string[]args){//父类的引用可以指向子类的对象Person[]p=new Person[5];p[0]=新人( aaa ,15);p[1]=新生( asas ,16,55);p[2]=新生( ccc ,17,66);p[3]=新老师( nnn ,18,2000);p[4]=新老师( mmm ,19,6666);for(int I=0;仪表板长度;I) {//动态绑定机制//Person[i]编译类型为Person,运行类型为System.out.println(p[i])。say())根据实际情况判断;} }}
1.向上转型
package com . polyar;公共类Person {私有字符串名称;私人年龄;public Person(String name,int age){ this . name=name;this.age=年龄;}公共字符串getName() { return
name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String say(){ return "name="+name+" age="+age; }}
Student.java
package com.polyArr;public class Student extends Person{ private double score; public Student(String name, int age, double score) { super(name, age); this.score = score; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public String say(){ return super.say()+" score="+score; }}
Teacher.java
package com.polyArr;public class Teacher extends Person { private int salary; public Teacher(String name, int age, int salary) { super(name, age); this.salary = salary; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public String say(){ return super.say()+" salary="+salary; }}
运行结果
多态数组+向下转型
instanceof关键字
运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法: result = object instanceof class
result为boolean类型
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object
不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的;
注:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
建立一个polyArr包
Arrtest.java
package com.polyArr;public class Arrtest { public static void main(String[] args) { //父类的引用可以指向子类的对象 Person []p=new Person[5]; p[0]=new Person("aaa",15); p[1]=new Student("asas",16, 55); p[2]=new Student("ccc",17, 66); p[3]=new Teacher("nnn",18, 2000); p[4]=new Teacher("mmm",19, 6666); for(int i=0;i< p.length;i++) { //动态绑定机制 //person[i]编译类型是Person,运行类型是根据实际情况判断的 System.out.println(p[i].say()); if(p[i] instanceof Student) { Student t1=(Student) p[i]; System.out.println(t1.learn()); } else if(p[i] instanceof Teacher) { Teacher t1=(Teacher) p[i]; System.out.println(t1.teach()); } } }}
Person.java
package com.polyArr;public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String say(){ return "name="+name+" age="+age; }}
Student.java
package com.polyArr;public class Student extends Person{ private double score; public Student(String name, int age, double score) { super(name, age); this.score = score; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public String say(){ return super.say()+" score="+score; }public String learn(){ return getName()+"正在听讲"; } }
Teacher.java
package com.polyArr;public class Teacher extends Person { private int salary; public Teacher(String name, int age, int salary) { super(name, age); this.salary = salary; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public String say(){ return super.say()+" salary="+salary; } public String teach(){ return getName()+"正在上课"; }}
运行结果
到此这篇关于Java实例讲解多态数组的使用的文章就介绍到这了,更多相关Java多态数组内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。