1. 成员内部类的特点:
一方面,作为外部类的成员
可以调用外部类的结构;
可以用static修饰;
可以被4种不同的权限修饰。
另一方面,作为一个类:
内部可以定义属性、方法、构造器等;
可以被final修饰,表示不能被继承;
可以被abstract修饰。
2. 如何实例化成员内部类的对象?
//静态的成员内部类:
Person.Dog dog = new Person.Dog();
dog.eat();
//非静态的成员内部类:
//Person.Bird bird = new Person.Bird(); //错误的
Person p = new Person();
Person.Bird = p.new Bird();
bird.sing();
3. 如何在成员内部类中区分和调用外部类的结构?
没有重名的时候可以直接调用,重名的话,要用
Person.this.eat();
来调用。
4. 局部内部类在开发中的使用:
//返回一个实现了Comparable接口的类的对象
public Comparable getComparable(){
//创建一个实现了Comparable接口的类:局部内部类
class MyComparable implements Comparable{
@Override
public int comparaTo(Object o){
return 0;
}
}
return new MyComparable();
}
或者使用匿名内部类:
return new Comparable(){
@Override
public int comparaTo(Object o){
return 0;
}
}
5. 关于异常处理,如果想要设计成输入信息错误时,程序能够正常继续执行,再次提醒用户输入正确的类型,可以将try……catch语句放在一个循环里,如果输入类型不正确,可反复输入,知道输入正确的类型为止。
boolean valid = false;
BufferedReader = in new BufferedReader(new InputStreamReader(System.in));
while(!valid){
try{
System.out.println("请输入 produc ID");
ipad.ID = Integer.parseInt(in.readLine());
valid = true;
}catch(NumberFormatException e){
System.out.println("ID 输入有误,必须输入数字,请重试。");
}catch(IOException e){
e.printStackTrace();
System.out.println("标准ID输入有误。");
}
}