JavaSE习题 继承接口和泛型
问答题:
1.子类在什么情况下可以继承父类友好成员?
答:在同一个包内
2.子类通过怎样的方法可以隐藏继承的成员变量?
答:声明一个与父类相同变量名的成员变量
3.子类重写继承的方法原则是什么?
答:保证方法的名字,类型,参数个数,类型同父类完全相同
4.子类的构造方法第一条语句是什么?
答:super(),如果不写,编译器也会自动调用
5.子类对象一单重写了继承的方法,就会隐藏继承的方法,对吗?
答:对
6.子类重写继承方法时,可以降低方法的访问权限嘛?
答:不可以,只可以增加权限
7.简述super关键字用法
答:super关键字是一个引用超类的对象
8.假设父类有个方法
public double f(double x,double y){
return x+y;
}
是否允许子类再次声明下面方法
public float f(double x,double y){
return 23;
}
答:允许,该overwrite就隐藏了父类的方法
9.父类的final方法可以被子类重写嘛
答:不可以
10.什么类可以有抽象方法?
答:抽象类
11.什么叫对象的上转型对象?
答:子类对象引用放入父类的声明
12.什么叫接口回调?
答:子类接口引用调入父类接口声明
13.与类有关的匿名类一定是该类的一个子类吗?与接口有关的匿名类一定是实现接口的子类吗?
答:一定是,一定是
14.怎样声明一个泛型类?怎样评价SDK1.5新出的泛型?
答:使用尖括号,对未来的实际开发有了很大改善吧
15阅读下列程序,写出下列程序的结果。
程序在书本上
答:最大公约数:6
最小公倍数:36
最大公约数:方法的参数值不是正整数
16下列程序中,错误代码是哪一个?
答:在classA中,getFloat方法是友好型,所以B继承A类后,getFloat方法只能扩大权限,不能缩小为private类型
作业题
1.编写一个类,该类中有如下方法;
public int f(int a,int b){
}//要求找出ab的最大公约数
编写一个该类子类,要求子类重写方法f(),而且重写的方法将返回两个整数的最小公倍数
要求:在重写方法的方法体中首先调用被隐藏的方法返回ab的最大公约数m,然后将(a*b)/m的值返回,在应用的程序的主类中分别用父类和子类创建对象,并分别调用方法f()计算两个正整数的最大公约数和最小公倍数
public class Demo03 { public static void main(String[] args) { System.out.println(new Function().f(12, 18)); System.out.println(new SonFunction().f(12, 18)); } } class Function{ public int f(int a,int b) { if(a>b) { int temp=a; a=b; b=temp; } int fin = 0; for(int i=1;i<=a;i++) { if(a%i==0&&b%i==0) { fin=i; } } return fin; } } class SonFunction extends Function{ @Override public int f(int a, int b) { int m=super.f(a, b); return (a*b)/m; } }
2.编写一个抽象类,该类有3个抽象方法
public abstract void f(int x);
public abstract void g(int x,int y);
public abstract double h(double x);
然后分别给出这个抽象类的3个子类
要求,在应用程序的主类中创建子类对象,再向上转型对象调用方法f,g,h
public class Demo03 { public static void main(String[] args) { A a=new C(); a.f(1); a.g(1, 1); a.h(1); } } interface A{ public abstract void f(int x); public abstract void g(int x,int y); public abstract double h(double x); } class C implements A{ @Override public void f(int x) { System.out.println("This is f()"); } @Override public void g(int x, int y) { System.out.println("This is g"); } @Override public double h(double x) { System.out.println("This is h"); return 0; } }
4.举例说明匿名类的用法
直接new出来,不需要后续的调用的时候可以这样
5.编写一个异常类,并写出一个产生异常的方法,在应用程序中测试异常
public class Demo04 { public static void main(String[] args) { String a="嘤嘤嘤\n"; String b="嘤嘤嘤\n"; String c="我就不嘤嘤嘤\n"; try { new RetalkTest().ReTalk(b, c); new RetalkTest().ReTalk(a, b); } catch (RetalkException e) { e.printStackTrace(); } } } class RetalkException extends Exception{ String message=""; public RetalkException(){ message="复读机异常\n"; } @Override public String toString() { return message; } } class RetalkTest{ public void ReTalk(String a,String b) throws RetalkException { System.out.println(a+b); if(a.equals(b)) { throw new RetalkException(); } else { System.out.println("还好没有复读\n"); } } }