1. Java的访问控制修饰符有哪些?各有什么访问权限?。
权限修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 |
---|---|---|---|---|
private | Y | |||
(default) | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
2. 子类对于从父类继承的哪些属性与方法是可见的?
以public,protected修饰属性与方法的可见;
在同一个包内,默认访问权限的父类成员可见;
3. 什么是组合?有什么作用?请举例说明。
组合:某个类作为另一个类的数据成员
作用:实现类的复用,是编程逻辑更自然
//端点 public class Point { private int x,y; public Point(int x,int y) { this.x = x; this.y = y; } public int GetX() { return x; } public int GetY() { return y; } } //线段 class Line { private Point p1,p2; //两端点 Line(Point a, Point b) { p1 = new Point(a.GetX(),a.GetY()); p2 = new Point(b.GetX(),b.GetY()); } }
4. 什么是重载?有什么作用?请构造各种重载示例。
重载:同名的方法,参数个数,类型,顺序不同;
作用:通过相同的方法名,程序员只需通过提供不同的参数个数,类型,顺序调用不同功能的方法,编译器会明确。这些方法在大体功能上相近,但针对不同参数实现稍有区别。
public class OverloadDemo { //1. test()方法第一次重载,没有参数 void test() { System.out.println("No parameters"); } //2. test()方法第二次重载,一个整型参数 void test(int a) { System.out.println("a: " + a); } //3. test()方法第三次重载,两个整型参数 void test(int a, int b) { System.out.println("a and b: " + a + " " + b); } //4. test()方法第四次重载,一个双精度型参数 double test(double a) { System.out.println("double a: " + a); return a * a;//返回a*a的值 } } public class Overload { public static void main(String args[]){ OverloadDemo ob=new OverloadDemo(); double result; ob.test(); //定义的是test()方法 ob.test(10); //定义的是test(int a)方法 ob.test(10,20); //定义的是test(int a,int b)方法 result=ob.test(123.23); //定义的是test(double a)方法 System.out.println("result of ob.test(123.23): "+result); //输出result的值 } } 运行结果: No parameters a: 10 a and b: 10 20 double a: 123.23 result of ob.test(123.23): 15185.6329
5. 什么是覆写?有什么作用?覆写父类方法的条件有哪些?请举例说明。
覆盖:子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义
作用:针对子类特性,重写同名方法
class Parent { public int getScore() { return 3; } public String getCountryName() { return “China”; } } class Son extends Parent { public int getScore(){ return 4; } } public class RunSon{ public static void main(String args[]){ Son s = new Son(); System.out.println(s.getScore()); System.out.println(s.getCountryName()); } } out--- 4 China