5_面向对象-中java
子类继承了父类的全部属性和方法(包括private修饰的),但因为封装性,子类不能直接调用父类的private属性或方法。面试
override/overwrite 重写
子类重写父类的方法,方法名称和参数列表相同。
子类的重写的方法权限修饰符不小于父类的被重写的方法权限修饰符。
子类不能重写父类中private修饰的方法。
父类被重写的方法的返回值类型是A类型,则子类重写的方法返回值类型是A类型或A的子类。
父类被重写的方法的返回值类型是void,则子类重写的方法返回值类型是void。
子类重写的方法抛出的异常类型不大于父类的被重写的方法抛出的异常类型。数组
继承
父类有空参构造
若是父类没有空参构造,则能够在子类构造器中使用super关键字调用父类中的有参构造。
建立子类对象时会调用父类的构造器,但只会建立一个子类对象。ide
多态
若子类重写了父类方法,就意味着子类里定义的方法完全覆盖了父类里的同名方法,系统将不可能把父类里的方法转移到子类中,编译看左边,运行看右边。
对于实例变量则不存在这样的现象,即便子类里定义了与父类彻底相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量,编译和运行都看左边。
简单来讲,方法能够被覆盖,属性不能够被覆盖。
多态不适用于属性,属性编译和运行看左边。
多态是运行时行为,调方法编译看左边,运行看右边。code
使用instanceof 关键字作向下转型前的判断,不然可能会抛ClassCastException。
instanceof 左边必须是对象实例或者null类型,不然没法经过编译。
instanceof 右边必须是左边对象的可转换类型(可强转),不然没法经过编译。orm
==:对于引用数据来讲,比较的是地址值是否相同。对象
equals()方法
String、Date、File、包装类都重写了Object类中的equals()方法,比较的不是两个对象的引用地址是否相同,而是比较的两个对象的“实体内容”(属性)是否相同。
x.equals(null) 返回的是false,null.equals(x) 会抛NullPointException继承
基本数据类型、包装类转换成String类型 element
int num=10; String str= num +""; String str= String.valueOf(num); Double d1=new Double(12.3); String str= String.valueOf(d1);
String类型转换成基本数据类型、包装类it
String str="123"; int num = Integer.parseInt(str); //可能会抛NumberFormatException
面试题:
Object o1 = true ? new Integer(1) : new Double(2.0); //编译的时候冒号两边的类型要一致,会有类型提高 System.out.println(o1); //1.0
@Test public void test3() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j);//false //Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[], //保存了从-128~127范围的整数。若是咱们使用自动装箱的方式,给Integer赋值的范围在 //-128~127范围内时,能够直接使用数组中的元素,不用再去new了。目的:提升效率 Integer m = 1; Integer n = 1; System.out.println(m == n);//true Integer x = 128;//至关于new了一个Integer对象 Integer y = 128;//至关于new了一个Integer对象 System.out.println(x == y);//false }
Vector 向量类java.util.Vector能够根据须要动态伸缩。 建立Vector对象:Vector v=new Vector(); 给向量添加元素:v.addElement(Object obj); //obj必须是对象 取出向量中的元素:Object obj=v.elementAt(0); //注意第一个元素的下标是0,返回值是Object类型的。 计算向量的长度:v.size();