1. Java的访问控制修饰符有哪些?各有什么访问权限?并分别写程序验证。
- 权限修饰符:public、默认(包访问权限)、protected、private
- 其他修饰符:abstract、static、fianl、transient、volatile、native、synchronized、strictrp
- 访问权限:
- private:用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。
protected用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。使用 protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。
public 当一个类被声明为 public 时,它就具有了被其他包中的类访问的可能性,只要包中的其他类在程序中使用 import 语句引入 public 类,就可以访问和引用这个类。 -
package com.sunrise.eHealth.day0521.other; public class Dog { public static void main(String[] args) { HelloWorld hw = new HelloWorld(); } }
package com.sunrise.eHealth.day0521.other; public class Animal { protected void info(){ System.out.println("Hello World"); } }
2. 子类对于从父类继承的哪些属性与方法是可见的?请分别写程序进行验证。package com.sunrise.eHealth.day0521.other; public class Animal { private void info(){ System.out.println("Hello World"); } }
- 子类继承父类:可以继承父类的私有属性和方法,但是不能使用父类的私有属性和方法。
-
public class test { private int a; protected int b; public void set(int a1,int b1){ a=a1; b=b1 } } class test1 extends test{ private int c; } public class test2{ public static void main(String[] args){ test1 s=new test1(); s.b=5; s.a=5; System.out.println(s.b); } }
3. 什么是组合?有什么作用?请举例说明。
-
组合:把一个类当成另一个类的组合成分,从而允许新类直接复用该类的public方法。
作用:不破坏封装,整体类与局部类之间松耦合,彼此相对独立且具有更好的可扩展性。
例如:
class A{…}
class B{A a
…
}
4. 什么是重载?有什么作用?请构造各种重载示例。 -
重载:方法名称(函数名)相同,参数类型 或 参数个数 不同。
作用:可以使用相同名字(一个名字)的方法实现不同的功能。 -
public class OverloadDemo { void test() { System.out.println("Hello World"); } void test(int a) { System.out.println("a: " + a); } void test(int a, int b) { System.out.println("a and b: " + a + " " + b); } double test(double a) { System.out.println("double a: " + a); return a * a; } }
5. 什么是覆写?有什么作用?覆写父类方法的条件有哪些?请举例说明。
-
子类与父类产生继承关系以后,会继承父类的全部操作。如果子类发现父类不足进行补充修改,但是需要保留父类属性和方法,就进行覆写。
-
被覆写的方法不能拥有比父类更为严格的访问控制权限。
-
如:
-
class Person{ public void print(){ System.out.println("[Person]类的print方法"); } } class Student extends Person{ public void print(){ System.out.println("[Student]类的print方法"); } } public class Test{ public static void main(String[] args){ new Student().print(); } }