1. Java的访问控制修饰符有哪些?各有什么访问权限?
①public(公共访问权限)
②protected(包访问权限、继承访问权限)
③无访问控制符修饰(包访问权限)
④private(类内部访问权限)
2. 子类对于从父类继承的哪些属性与方法是可见的?请分别写程序进行验证。
public和protected
①public
class FighterPlane1{
public int y=3;
public void shuchu(){
System.out.println("洛熙熙");
}
}
class FighterPlane2 extends FighterPlane1{
}
public class RunPlane{
public static void main(String args[]){
FighterPlane2 fpp=new FighterPlane2();
System.out.println("y的值为:"+fpp.y);
fpp.shuchu();
}
}
在这里子类继承了父类中的public属性的y和shuchu函数,结果为:
y的值为:3 洛熙熙
②protected
class FighterPlane1{
protected int y=3;
protected void shuchu(){
System.out.println("洛熙熙");
}
}
class FighterPlane2 extends FighterPlane1{
}
public class RunPlane{
public static void main(String args[]){
FighterPlane2 fpp=new FighterPlane2();
System.out.println("y的值为:"+fpp.y);
fpp.shuchu();
}
}
在这里子类继承了父类中的protected属性的y和shuchu函数,结果为:
y的值为:3 洛熙熙
③private
若将y和shuchu函数的属性改为private,则结果会出现:
java: y 在 FighterPlane1 中是 private 访问控制
说明子类对于从父类继承的private属性与方法是不可见的。
3. 什么是组合?有什么作用?请举例说明。
定义:组合(Composition)指的是一个类的属性含有一个另一个类的引用,可以体现整体与部分、拥有的关系。
作用:实现类的复用
//端点
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. 什么是覆写?有什么作用?覆写父类方法的条件有哪些?请举例说明。
定义:在子类之中有可能定义和父类完全相同的方法或属性的名称。
作用:对功能进行复用和扩充
条件:
①子类的访问修饰符权限应等于或大于父类,不能变小
②子类的返回类型能够向上转型成为父类的返回类型
③异常也要能向上转型为父类的异常
④方法名、参数类型及个数必须严格一致
⑤只能针对非静态、非final、非构造方法
class Person {
public void fun()
{
System.out.println("好好学习。");
}
}
class Student extends Person{
//方法覆写
public void fun()
{
System.out.println("天天向上。");
}
}



