天天看点

Think in java(二)类的组合与继承,super、protected、final关键字

1.toString()是什么。

当编译器需要一个String而你只有一个对象时,这个方法会自动被调用,需要自己重写这个方法。

2.一个包不同类可以使用多个main方法吗?

可以,一个类可以调用另外一个类的main方法,语句是 类名.main(args)。

3.super关键字是什么,有哪些用法?

super关键字是子类调用父类方法的关键字,主要有两种用法,一种是调用父类的方法,用法是super.dosth(args),这样用于重写父类的方法中,如果不用super会产生递归;另一种用法是在子类的构造方法中调用父类的构造方法,子类的构造方法会自动调用父类的无参构造方法,当父类没有无参构造方法必须使用super显式的调用父类的有参构造方法。

4.名称屏蔽是什么,重载与覆盖有什么区别?

子类可以用于父类完全相同的方法名称,称为名称屏蔽。相当于子类引入了该方法的重载版本。而子类使用完全相同的方法签名将覆盖父类的方法,另外可以用@Override关键字来保证覆盖,如果加了关键字而又不小心写了父类方法的重载版本,编译器会报错。

5.复用类有哪些实现途径,有什么区别?

可以使用组合和继承两种方法实现类的复用,组合是has a的关系,继承是is a的关系,相对于继承来说,组合更加灵活,也更应该多用组合的方式来复用类。组合就是在一个类用创建另一个类的实例,并完成某些方法,而继承与组合最大的区别在于,继承可以实现向上转型。

6.protected关键字是什么?

private关键字只有本类可以访问,而protected关键字可以让该类的继承类访问,并且同一包下其他类也可以访问。而默认访问类型是包访问(也成为friendly),只有该包可以访问。但是一般不建议将可以让子类访问的数据写成protected,而是写成private,然后将操作改数据的方法写成protected。

7.final关键字是什么?与static的区别是什么?

final关键字有三种用法,分别是数据,方法和类。final数据如果是基本类型,则强调数据不可更改,如果不是基本类型,则强调该引用不可更改,但是引用的具体数据可以更改,另外final数据可以先声明而不赋予初值,后续在初始化,这样称为空白final;final方法最初是为了提高效率,而现在不推荐这么做,JVM本身会处理的更好,final参数是说只能读取参数,不能改变参数,private关键字下的方法被隐式的声明为final;final类表示不能继承,且其中的方法都是final的。

static关键字更强调在加载时只初始化一次,而不是不可更改。

8.什么时候加载类?

类的代码在初次使用时被加载,初次使用有两个含义,一个是创建一个新的对象时,这也是大部分的情况。另一个是初次使用该类中static方法时。

9.类与其继承类的中初始化是一个什么样的顺序?

运行一个类时,首先找到他的main方法,在运行这个main方法之前要加载该类,如果该类有父类,则首先加载其父类。加载完毕之后可以运行main方法,进行创建对象了。创建对象时首先创建父类对象,先初始化父类对象的实例变量,然后运行父类变量的构造方法,接着初始化子类中的实例变量,然后运行子类变量的构造方法。