关于Java(4)
陈述题
1. Java的访问控制修饰符有哪些?各有什么访问权限?
访问控制修饰符 | 访问权限 |
---|---|
public | 公共访问权限 |
protected | 包访问权限、继承访问权限 |
private | 类内部访问权限 |
无访问控制符修饰 | 包访问权限 |
2. 子类对于从父类继承的哪些属性与方法是可见的?
子类继承父类的所有属性和方法,但只有public、protected的属性和方法在子类是可见的。
子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;private的属性成员或是方法则不能被访问。
以PPT的FighterPlane为例:
package runplane;
public class Plane {
protected String name;
public void setName(String _name) {//如果将name的访问控制修饰符
//改为private,则可以通过此函数来改变name的值
name=_name;
}
public String getName() {
return name;
}
}
package runplane;
public class FighterPlane extends Plane{
private int missileNum;
public void setNum(int _missileNum) {
missileNum=_missileNum;
}
public void fire() {
if(missileNum>0) {
if(missileNum>0) {
System.out.println("Now fire a missile!");
missileNum-=1;
}else {
System.out.println("No missile left!");
}
}
}
}
package runplane;
public class Run {
public static void main(String[] args) {
FighterPlane p=new FighterPlane();
p.name="su35";
System.out.println(p.getName());
p.setName("f35");
System.out.println(p.getName());
p.setNum(6);
p.fire();
}
}
3. 什么是组合?有什么作用?
定义:一个类的对象引用是另一个类的属性就是一个组合现象。(类的复用方式之一,优先于继承)
作用:实现代码的复用;使对象间的耦合性较为松散,比如: 假设有一个类A,另一个类的对象引用fp是它的属性,当外界的变化使fp所指向的对象损坏时,我们可以灵活地将fp指向另一个对象。
package FighterPlane;
class FighterPlane {
public String name;
protected int missileNum;
public FighterPlane(String _name,int _missileNum) {
name=_name;
missileNum=_missileNum;
}
public void fire() {
if(missileNum>0) {
if(missileNum>0) {
System.out.println("Now fire a missile!");
missileNum-=1;
}else {
System.out.println("No missile left!");
}
}
}
}
package FighterPlane;
public class A {
FighterPlane fp;
public A(FighterPlane fpp) {
this.fp=fpp;//A对象拥有了FighterPlane对象引用
}
public void invoke() {
//A对象发送消息给FighterPlane的对象
System.out.println(fp.name);
}
}
package FighterPlane;
public class Run {
public static void main(String[] args) {
FighterPlane ftp=new FighterPlane("su35",10);
FighterPlane ftp2=new FighterPlane("苏-35",10);
//产生A对象,并将ftp作为对象引用传入
A a=new A(ftp);
a.invoke();
a.fp=ftp2;
a.invoke();
}
}
4. 什么是重载?有什么作用?
定义:方法名称相同,参数类型或个数不同。(同一类中通常提供多个重载方法)(同名同参数但不同类型返回值的方法不是重载,编译不能通过)
作用:可以实现程序的消息处理接口方法的扩充,同时保留旧的接口方法保障原先使用程序的稳定。
class Parent{
public int getScore(){
return 3;
}
public int getScore(){
return i;
}
}
5. 什么是覆写?有什么作用?
定义:子类对父类的同名方法(方法名称相同、参数相同、返回值类型相同)进行重新定义,即在子类中定义与父类中已定义的同名不同内容的方法,这种多态被称为覆盖。
作用:方法覆盖与引用替换相结合,可使抽象类的声明在保证消息发送统一的前提下,具有消息结果执行上的相异性特点。
- 覆写与重载的区别:
覆写:方法名称相同,参数类型、个数一致,子类返回类型可向上转型到父类返回类型(类族)。
重载:方法名称相同,参数类型或个数不同(同一个类)。
class Parent {
public int getScore(){
return 3;
}
}
class Son {
public int getScore(){
return 4;
}
}