助你加薪!2021年春招面向编程看这一篇就够了,让你面试无忧! (6)

向下转型:将父类实例变为子类实例 |- 格式:子类 子类对象 = (子类)父类实例 ;

public class Demo{ public static void main(String[] args){ Student student1=new Student(); Nurse nurse1=new Nurse(); //向上转型,父类引用指向子类对象 Person person1=student1; person1.say(); //输出:我是学生 Person person2=nurse1; person2.say(); //输出:我是护士 //向下转型 Student student2=(Student)person1; student2.say(); //输出:我是学生 //向下转型需要注意的是不能把原来是护士的张三转成学生 例如: Student student3=(Student)person2; student3.say(); //此处会报错 //向上转型比较高级的用法 Student student4=new Student(); say(student4); //输出:我是学生 } public static void say(Person person){ person.say(); } } abstract class Person{ public abstract void say(); } class Student extends Person{ @Override public void say(){ System.out.println("我是学生"); } } class Nurse extends Person{ @Override public void say(){ System.out.println("我是护士") } }

注意:向上转型的对象,是通过父类调用子类覆盖或继承父类的方法,不是父类的方法。而且此时父类对象不能调用子类特有的方法。

Instanceof

作用:

判断某个对象是否是指定类的实例,则可以使用instanceof关键字

格式:

实例化对象 instanceof 类 //此操作返回boolean类型的数据

Object类

Object类是所有类的父类(基类),如果一个类没有明确的继承某一个具体的类,则将默认继承Object类。

//例如我们定义一个类: public class Person{ } //其实它被使用时 是这样的: public class Person extends Object{ } Object的多态

使用Object可以接收任意的引用数据类型

public static void main(String[] args){ String text="123"; say(text); int a=10; say(a); } public static void say(Object o){ System.out.println(o) } toString()

建议重写Object中的toString方法。 此方法的作用:返回对象的字符串表示形式 ;

Object的toString方法, 返回对象的内存地址 ;

System.out.println(对象名)一般输出时调用的时对象的toString方法 ;

equals()

建议重写Object中的equals(Object obj)方法,此方法的作用:指示某个其他对象是否“等于”此对象。

Object的 equals方法:实现了对象上最具区别的可能等价关系; 也就是说,对于任何非空引用值x和y ,当且仅当 x和y引用同一对象

( x == y具有值true )时,此方法返回true 。

equals方法重写时的五个特性:

自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。

对称性 :对于任何非空引用值x和y , x.equals(y)应该返回true当且仅当y.equals(x)回报true 。

传递性 :对于任何非空引用值x , y和z ,如果x.equals(y)回报true个y.equals(z)回报true ,然后 x.equals(z)应该返回true 。

一致性 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false ,前提是未修改对象上的equals比较中使用的信息。

非空性 :对于任何非空的参考值x , x.equals(null)应该返回false 。

class Person{ private String name; private int age; public boolean equals(Object o){ //判断内存地址是否相同 if(this==o){ return true; } //非空性 if(o==null){ return false; } //判断是否是同一个类 if(o instanceof Person){ //向下转型 Person p2=(Person)o; //此处调用的是String里的equals()方法,和Object不同 if(this.name.equals(p2.name)&&this.age==p2.age){ return true; } } return false; } }

equals和==的区别

前者是比较两个数是否等价,后者是比较地址

可变参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzyj.html