多态性(父类引用指向子类对象)
-
调用同名同参数方法,执行子类重写的
-
编译看左边,运行看右边
-
前提:有继承,有重写
-
多态性不适用属性,属性编译运行都看左边
-
如果不是晚绑定就不是多态
public class Person { String name; int age; public void eat(){ System.out.println("吃饭"); } public void walk(){ System.out.println("走路"); } } public class Man extends Person { public void special(){ } public void eat(){ System.out.println("吃强身健体的"); } }
public class PersonTest { public static void main(String[] args) { Person p=new Man(); p.eat();//执行子类的 //不能调子类特有的p.special; } }
instance of(向下转型)
-
a instance of A判断a是否是类A的实例、
-
为了避免在向下转型前出现异常,使用该关键字判断
-
A是子类,B是父类,A正确,B一定正确
Person p=new Man(); //Woman w=(Woman)p;//运行时出错ClassCastException if (p instanceof Woman){ Woman w=(Woman)p; }
Object的使用
-
equals方法:比较对象是否相等
-
==使用在基本数据类型比较变量保存数据是否相等,不一定类型相同
-
==使用在引用数据类型比较的是地址值,只要new就有一个地址
-
equals是一个方法,只适用引用数据类型,不重写的话和==一样,重写后可以比较引用类型的属性判断
-
可以用编译器自动重写!
-
包装类
-
基本数据类型对应的包装类int---Integer/char----Character,其他都是大写即可
-
理解:让基本数据类型也具有类的特征
-
转换
public static void main(String[] args) { //基本数据类型变包装类 int num1=10; Integer innum1=new Integer(num1); System.out.println(innum1.toString());//转换为类,可以调用方法 //包装类变基本数据类型:调用xxxValue() int i1=innum1.intValue(); System.out.println(i1+1); //转为String类型:调用Sting的valueof(Xxx xxx) String str1=String.valueOf(i1); //String类型转换为二者,调用包装类的parseXxx(String s) String str2="123"; int num2=Integer.parseInt(str2); }
-
自动装箱与拆箱
int num1=10; Integer in1=num1; int num2=in1;