温州建设局官方网站,界面设计是做什么的,wordpress 为什么评论不能显示,上海建工网站目录 一.多态#xff1a;
1.方法的多态#xff1a;
2.对象的多态#xff1a;
3.多态的注意事项与细节#xff1a;
5.多态的应用:
二.Java的动态绑定机制#xff1a;
三.多态应用#xff1a;
1.多态数组#xff1a;
2.多态参数#xff1a;
三.Object类#xf…目录 一.多态
1.方法的多态
2.对象的多态
3.多态的注意事项与细节
5.多态的应用:
二.Java的动态绑定机制
三.多态应用
1.多态数组
2.多态参数
三.Object类
1.equals方法
2.hashcode方法:
3.toString方法
4.finalize方法 一.多态
方法或对象具有多种形态是面向对象的第三大特征多态是建立在封装和继承基础上的。
1.方法的多态
方法的重写和重载就体现多态。
2.对象的多态
一个对象的编译类型和运行类型可以不一致编译类型在定义对象时就确定了不能改变运行类型是可以变化的编译类型看定义 号的左边运行类型看 号的右边。
例Animal animal new Dog() 【animal编译类型是Animal运行类型是Dog】
3.多态的注意事项与细节
1多态的前提是两个对象存在继承关系
2向上转型父类的引用指向子类的对象可以调用父类中的所有成员但不能调用子类特有成员。
3方法与属性调用时按照从子类开始查找
例Animal animal new Dog() 【animal编译类型是Animal运行类型是Dog】
class Dog extends Animal 【aniaml可以调用父类中所有成员访问权限内不能调用子类的特有成员。】
4向下转型
语法子类类型 引用名 子类类型父类引用只能强转父类的引用不能强转父类的对象要求父类的应用必须指向当前目标类型的对象当向下转型后就可以调用子类类型中所有的成员
例Animal animal new Dog() Dog dog (Dog) animal 【编译类型是Dog运行类型也是Dog可以调用Dog中的所有方法】
5属性的值看编译类型编译类型看定义 号的左边。
6instanceOf比较操作符用于判断对象的运行类型是否为某类型或则某类型的子类型返回值为true或false。
注方法找运行类型属性找编译类型对象找地址。
5.多态的应用: 二.Java的动态绑定机制
1.当调用对象方法时该方法会和该对象的内存地址/运行类型绑定
2.当调用对象属性时没有动态绑定机制哪里声明使用哪里调用方法中出现的属性
三.多态应用
1.多态数组
定义数组的定义类型为父类类型里面保存的实际元素为子类类型。
public class Ployarray {public static void main(String[] args) {Person [] persons new Person[5];persons[0] new Person(jack,20);persons[1] new Student(jeek,20,100);persons[2] new Student(simth,28,80);persons[3] new Teacher(scout,30,12000);persons[4] new Teacher(king,50,10000);for (int i 0; i persons.length; i) {//动态绑定机制,方法看运行机制System.out.println(persons[i].Say());}}
2.多态参数
定义方法定义的形参类型为父类类型实参类型为子类类型。
public class Teat {public static void main(String[] args) {Woker tom new Woker(ton,2500);Manager milan new Manager(milan,5000,20000);Teat t new Teat();t.showEmpSAnnual(tom);t.showEmpSAnnual(milan);t.testwork(tom);t.testwork(milan);}public void showEmpSAnnual(Employee e) {//编译类型为Employee,运行类型为传入对象的类//Employee e new Woker();System.out.println(e.getAnnual());}public void testwork(Employee e){if(e instanceof Woker){((Woker) e).work();}else if(e instanceof Manager){((Manager) e).manage();}}
}
三.Object类
1.equals方法
1equals与 的区别 既可以判断基本类型又可以判断引用类型如果 判断基本类型判断的值是否相等。如果 判断引用类型判断的是地址是否相等。
equals是Object类中的方法只能判断引用类型默认判断地址相等子类往往重写该方法用于判断内容是否相等。
2equals的重写
public class EqualsExercise {public static void main(String[] args) {Person person1 new Person(jack,10,男);Person person2 new Person(makw,10,男);System.out.println(person1.equals(person2));}}
class Person {private String name;private int age;private char gender;public boolean equals(Object obj){if(this obj){return true;}if(obj instanceof Person){Person p (Person)obj;return this.name.equals(p.name) this.age p.age this.gender p.gender;}return false;}public Person(String name,int age,char gender){this.name name;this.age age;this.gender gender;}
2.hashcode方法:
hashcode方法提高具有哈希结构的容器的效率两个引用如果指向同一个对象则哈希值是一样的。哈希值是主要根据地址号不能将哈希值等价于地址。
3.toString方法
默认返回全类名哈希值的十六进制子类往往重写toString方法用于返回对象的属性信息。
当输出一个对象时toString重写方法会被默认的调用。
public class toStringExercise {public static void main(String[] args) {Monster monster new Monster(小妖怪,巡山的,1000);System.out.println(monster.toString());System.out.println(monster);}
}
class Monster{private String name;private String job;private double sal;public Monster(String name, String job, double sal) {this.name name;this.job job;this.sal sal;}
//重写toString方法Overridepublic String toString() {return Monster{ name name \ , job job \ , sal sal };}
}
4.finalize方法
当对象被回收时系统自动调用该对象的finalize方法子类可以重写该方法做一些释放资源的操作。当某个对象没有任何引用,就会使用垃圾回收机制来销毁该对象在销毁该对象钱会调用finalize方法。
public class Finaliaze_ {public static void main(String[] args) {Car bmw new Car(宝马);bmw null;System.gc();System.out.println(程序退出);}
}
class Car {private String name;public Car(String name) {this.name name;}Overrideprotected void finalize() throws Throwable {System.out.println(我们销毁汽车name);System.out.println(我们释放了某些资源);}
}