问题描述
- 为什么要使用内部类,好处是什么
-
(1):有一个计算器类,具有运算功能,能对两个整数进行相加运算
(2):有一个闹钟类,具有闹铃功能,能发出懒猪起床的声音
(3):有一个手机类,需要同时拥有运算功能和闹铃功能,通过内部类实现多继承
(4):创建测试类,测试继承的两个功能
package com.bwie.innerClassDemo;class Alarm {
public void ring() {
System.out.println("懒猪起床");
}
}class Computer {
public void count(int a, int b) {
System.out.println("a+b=" + (a + b));
}
}
class Phone{
private myAlarm ma=new myAlarm();
private MyComputer mc=new MyComputer();
private class myAlarm extends Alarm{
public void ring() {
System.out.println("Iphone手机呼唤懒猪起床");
}
}
private class MyComputer extends Computer{} public void ring(){ ma.ring(); } public void count(int a,int b){ mc.count(a, b); }
}
public class TestPhone{
public static void main(String[] args) {
Phone p=new Phone();
p.ring();
p.count(12, 3);
}
}没感觉出这段代码有什么好处,倒是觉得很繁琐,麻烦?还是不明白老师为啥这么写?
解决方案
内部类有几个好处,一个是更清晰的层次关系,如果一个类型依附于另一个类型,那么内部类很好体现了这种层次关系。
一个是内部类相当于友元类,可以定义对于外部来说私有,又可以被内部类访问的成员和函数。
当然,你的代码仅仅是用于学习目的的,为写而写的,本身就没有意义,换言之,不用内部类,它也没用,当然你觉得它没有好处。
解决方案二:
楼上说的是对的,还有其实内部类的设计也是为了弥补JAVA里头多继承的不足,还有就是代码代码写起来能更加简洁(比如匿名内部类。。)
解决方案三:
1.内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
解决方案四:
在一个类中定义的类称为嵌套类,定义嵌套类的类称为外围类。
对嵌套类的若干说明:
1、从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类的作用域内使用该类名时,需要加名字限定。
2、从访问权限的角度来看,嵌套类名与它的外围类的对象成员名具有相同的访问权限规则。不能访问嵌套类的对象中的私有成员函数,也不能对外围类的私有部分中的嵌套类建立对象。
3、嵌套类中的成员函数可以在它的类体外定义。
4、嵌套类中说明的成员不是外围类中对象的成员,反之亦然。嵌套类的成员函数对外围类的成员没有访问权,反之亦然。国此,在分析嵌套类与外围类的成员访问关系时,往往把嵌套类看作非嵌套类来处理。