一、Java中的访问控制修饰符及其访问权限
1.private:
Java语言中对访问权限限制的最窄的修饰符,只有本类可以访问。
2.public:
属性和方法可以被所有类访问。
3.protected:
介于public 和 private 之间的一种访问修饰符,包中的类和不同包的子类可以访问。
4.默认(default):
包中的类可以访问。
二、子类对于从父类继承的属性与方法哪些是可见的
class FighterPlane {
private String name;
}
public class RunPlane extends FighterPlane{
private void init() {
name = "苏 35";
}
public static void main(String args[]) {
RunPlane fp = new RunPlane();
fp.init();
}
}
name=“苏 35”这一行会报错,报错信息:The field FighterPlane.name is not visible.
如果将FighterPlane中name前的修饰符改为其他则不会报错。
只有从父类继承的private属性和方法是不可见的。
三、组合及其作用
java代码复用的一种方法。组合即把一个类当成另一个类的组合成分,从而允许新类直接复用该类的public方法。
class FighterPlane{
String name;
int missileNum;
public FighterPlane(String _name,int _missileNum){
name=_name;
missileNum=_missileNum;
}
public void fire(){
if(missileNum>0){
System.out.println("now fire a missile!");
missileNum-=1;
}
else{
System.out.prtinln("No missile left");
}
}
}
class A{
FighterPlane fp;
public A(FighterPlane fpp){
this.fp=fpp;//A对象有了FighterPlane对象的引用
}
public void invoke(){
//A对象发送消息给FighterPlane的对象
System.out.println(fp.name);
}
}
public class Run{
public static void main(String[] args){
FighterPlane ftp=new FighterPlane("su35",10);
//产生A对象,并将ftp作为对象引用传入
A a = new A(ftp);
//发送消息,产生调用关系
a.invoke();
}
}
不破坏封装,整体类与局部类之间松耦合,彼此相对独立且具有更好的可扩展性。
四、重载及其作用
- 在同一个类中
- 方法名相同,修饰符列表、返回值类型一致
- 参数列表不同(个数、类型、顺序不同)
只要同时满足以上3个条件,那么我们可以认定方法和方法之间发生了重载。
Class Parent{
public int getScore(){
return 3;
}
public int getScore(int i){
return i;
}
}
不用为了对不同的参数类型或参数个数,而写多个函数。多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。
五、覆写及其作用、覆写父类方法的条件
子类对父类参数相同、返回类型相同的同名方法重新进行定义,这种多态被称为覆写。如果子类定义的方法与父类名称相同,但参数名称不同,则不是覆写,而是重载。
被覆写的方法不能有比父类更严格的访问控制全权限。在父类中若是用private声明的方法,该方法不能被子类所覆写。
同名的static方法和非static方法不能互相覆盖。