-
只有当子类的构造方法没有调用父类的构造方法时,编译器才会默认的去调用父类中的无参构造方法.
-
创建对象的方法:
①调用对象的clone()方法: 实现clone的类需要继承Clonable接口;重写clone方法;在clone方法中调用super.clone()方法.
②通过反射机制来创建对象
Class classType = Class.forName(“Person”);
Person p = (Person)classType.newInstance();
③通过反序列化的方式来创建对象 -
接口和抽象类的区别
1)适用场景不同:
接口多用于不同类之间,定义不同类之间的通信规则
抽象类多用于同类事物中有无法具体描述的方法的场景
2)定义不同:
接口中只有定义,不能有方法的实现;(JDK1.8可以通过default和static关键字实现方法)
而抽象类中可以有定义与实现;
3)实现方式不同:
实现接口使用关键字implements;继承抽象类使用关键字extends.而且一个类可以实现多个接口,但是只能继承一个抽象类.也就是说,使用接口可以间接达到多重继承的目的.
接口中的成员变量默认为 public 、static 、final,只能够有静态的不能被修改的数据成员,而且必须给其赋值。接口中的成员方法都是public abstract的
抽象类中的成员变量默认为default,也可以被private、protected、public修饰,这些成员变量在子类中可以被重新定义,也可以被重新赋值;抽象类中的抽象方法不能用private、static、synchronized和native等修饰,因为抽象方法被重写才有意义。同时抽象方法必须以;结尾,不能加括号 -
为什么java不支持多重继承?
① 为了程序的结构能够更加清晰从而便于维护。假设Java语言支持多重继承,类C继承自类A和类B,如果类A和类B中都有自定义的f(),那么在代码中调用类C的f()时,无法确定是调用类A还是类B的方法,就会产生二义性.但是如果使用实现接口的方式,即使接口A和接口B中都有f(),因为接口中并没有实现方法,只有类C中有方法的实现,就不存在二义性了.
② 多重继承会使类型转换,构造方法的调用顺序变得非常复杂,也会影响到性能. -
Overload和Override的区别是什么?
重载和重写是Java多态性的不同表现.
·1)重载: 两同一不同
两同:同类中(子类和父类也是同一个类),方法名相同
一不同:参数列表不同(参数的个数,参数的类型,不同的参数顺序)
注意:不能用返回值来对方法进行重载,会产生二义性.
2)重写: 两等两小一大
两等: 子类和父类的 方法签名相同 ;如果方法的返回值类型为基本类型,则子类和父类的返回值类型要相同
两小: 子类不能抛出比父类更多的异常类型;如果方法的返回值类型为引用类型,那么子类的返回值类型需要为父类方法的类型一致或者是其子类类型
一大: 子类方法的访问权限修饰符 -
任何执行语句都必须存在于一个代码块中(方法体,静态块等),不能单独存在于类的定义中.
-
不能用类(静态)方法来隐藏父类的实例方法.
面向对象
最新推荐文章于 2020-12-11 03:21:42 发布