面向对象(二)

1. java 子类为什么不能继承父类的构造方法?

构造方法的作用是初始化类,子类初始化子类,父类初始化父类,在子类调用自己的构造方法前,会先自动调用父类的无参构造方法,先生成父类对象,再生成子类对象。如果父类没有无参构造方法,子类就必须用super()显示调用父类的构造方法。先有父亲才会有孩子。子类不能直接继承父类的构造方法,而是在new一个子类对象的时候,自动调用父类的无参构造方法。

2. 关于类型强转和 instanceof 运算符:

进行强制类型转换的时候,有可能会出现异常,无法强制转换,于是为了代码更加健壮,在强转之前,用 instanceof 运算符进行判断。

if(objPri instanceof String) {
   String str = (String) objPri;
}

instanceof用来判断 objPri是否属于 String,即判断 objPri 是否是 String 类型的一个实例,是的话返回 true, 不是的话返回 false.从而保证在类型强的时候不会失败,提高程序健壮性。

3. 抽象类和抽象方法:

抽象类和抽象方法必须使用 abstract 修饰,抽象类不能被实例化,抽象方法不能有方法体,无法使用new 关键字调用抽象类的构造器创建抽象类的实例。

抽象类为什么不能被实例化?

从哲学上讲,进化不完全的物种是不能生存的,因为抽象类是抽象的,不能是一个完整的具体的类,所以不能被实例化,抽象的东西没有它存在的实际意义。

抽象类不能创建实例,只能做父类被子类继承,抽象类中的构造器是在创建子类的实例的时候被调用的(在子类的构造器中使用super关键字调用);

抽象类只能被继承,抽象方法必须由子类提供实现,也就是说只能被子类重写。

abstract只能用来修饰类和方法,不能修饰成员变量,局部变量和构造器,没有抽象构造器,抽象类中定义的构造器只能是普通的构造器。

4.不能一起用的关键字:

final修饰的类不能被继承,final修饰的方法不能被重写,所以 final 和abstract永远不能同时用。

static修饰方法,表示方法属于类本身,即可以通过类去调用该方法,但是如果定义成abstract类型,则该方法不能通过类去调用(调用没有方法体的方法会报错),所以static和 abstract 不能同时用。

private和abstract不能同时使用,因为private是私有的,不能被继承,但是abstract必须被子类继承重写。

 

 

5. 接口:如果将抽象进行的更加彻底,则可以提炼出更加特殊的抽象类-接口,接口里不能包含普通方法,接口中全是抽象方法。

java8对接口进行了改进,允许接口中定义默认方法,提供方法的实现

public interface testInterface {

   //修饰符只能是 public 或者 default, 不能是 private
   //没有构造器,没有初始化块

   //常量定义,只能是静态常量
   public static final int a=50;

   //接口中不能包含普通方法,接口中所有方法都是抽象方法
   //抽象方法无方法体,不提供方法实现
   public abstract void out();
   public abstract void getData();

   //default修饰,默认方法,提供方法体, java8
   public default void print() {};
  
   //类方法,直接通过接口调用,java8,用static 修饰
   public static String staticTest() {

       return "";
   };

   //内部类,内部接口,内部枚举 public static 修饰


}

6.初始化块:

一个类中可以有多个初始化块,先定义的先执行,后定义的后执行,初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块。

当创建java对象时,系统总是先调用该类的初始化块,并且按照顺序执行,初始化块没有名字没有标识,无法通过类,对象来调用,只有在创建java对象的时候,隐式调用,而且在构造器执行之前执行。

{
   a=6;
}
int a=9;
以上结果为9

int a=9;
{
   a=6;
}
以上结果为6;

静态初始化块:

加上static 关键字,就是静态初始化块,也被称为类初始化块,普通初始化块负责在对象执行的时候初始化,static初始化块负责对类进行初始化,所以,静态初始化块比普通初始化块先执行。

普通初始化块在javac编译之后会消失,会被还原到构造器中且位于构造器代码的最前面,但是static初始化块不会消失,因为是类构造器,不是对象构造器。所以所有的静态初始化块都会最先执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值