为什么要设计内部类?它要解决什么问题?它的特点是什么?
2016-10-12 21:23
423 查看
1,为什么要设计内部类,它解决了什么问题?设计的目的是什么?
如果想让一个类继承多个接口(可以多继承接口)继承多个抽象类是做不到。但是在设计比较复杂的时候需要继承多个接口或者抽象类,总不能全部功能写在一个类当中,所以为了实现继承多个接口或者抽象类,就设计了内部类。
问题:实现多继承又有什么用呢?有什么样的问题,必须是要求多继承的吗?
如果是单继承,一个复杂的功能,只能引进来一个类来帮助,这个类会写的很长。如果实现多继承,会使每个类的代码变短。逻辑清晰。
2,内部类和外部类的联系?
内部类可以访问外部类的所有属性和方法。
(匿名内部类也是内部类所以也可以访问外部类的属性和方法)
内部类包含了一个指向外部类的引用。(因为内部类可以访问外部类的所有方法和属性)。
外部类对象包含了一个指向内部类对象的引用。(创建内部类对象时候,要通过外部类对象创建。)
3,内部类是如何多继承的?
4,为什么要设计匿名内部类?
既然内部类是为了继承,但是除了继承,内部类还可以扩展(除了继承的方法,自己还可以扩展方法。)(不用怎么的功能),扩展的功能可以由外部类的方法代替。
为了使用经常用的功能(继承功能),更方便所以设计了内部类。
5,内部类和匿名内部类的继承区别?
没有本质区别,内部类的继承就是普通的继承。(能扩展,能继承)
匿名内部类只能继承,不能扩展。
6,匿名内部类的继承和普通的继承区别?
不能扩展(不能写自己的方法)。只能实现继承来的方法。
7,匿名内部类和普通内部类继承的代码实现?
匿名内部类是普通内部类继承的简写:
1,匿名内部类new的是接口,所以需要实现接口的方法。所以说是简写。
但是匿名内部类无法扩展。
普通内部类继承接口:
public class pacel
{
public static void main(String[]
args) {
ou
4000
ter
outs = new outer();
intence
inten= outs.returnInner();
inten.prt();
}
}
class outer {
private class inner
implements intence{
public void prt(){
System.out.println("this
is inner function!!!");
}
}
public
intence returnInner(){
return
new inner();
}
}
interface intence{
public void prt();
}
匿名内部类继承接口:
public class anonymous
{
public contents content(){
return
new contents(){
public
void prt() {
ppp();
System.out.println("this
is anonymous class!"+str);
}
};
}
public static void main(String[]
args) {
anonymous anony
= new anonymous();
contents
conts = anony.content();
conts.prt();
}
}
interface contents{
void prt();
}
如果想让一个类继承多个接口(可以多继承接口)继承多个抽象类是做不到。但是在设计比较复杂的时候需要继承多个接口或者抽象类,总不能全部功能写在一个类当中,所以为了实现继承多个接口或者抽象类,就设计了内部类。
问题:实现多继承又有什么用呢?有什么样的问题,必须是要求多继承的吗?
如果是单继承,一个复杂的功能,只能引进来一个类来帮助,这个类会写的很长。如果实现多继承,会使每个类的代码变短。逻辑清晰。
2,内部类和外部类的联系?
内部类可以访问外部类的所有属性和方法。
(匿名内部类也是内部类所以也可以访问外部类的属性和方法)
内部类包含了一个指向外部类的引用。(因为内部类可以访问外部类的所有方法和属性)。
外部类对象包含了一个指向内部类对象的引用。(创建内部类对象时候,要通过外部类对象创建。)
3,内部类是如何多继承的?
4,为什么要设计匿名内部类?
既然内部类是为了继承,但是除了继承,内部类还可以扩展(除了继承的方法,自己还可以扩展方法。)(不用怎么的功能),扩展的功能可以由外部类的方法代替。
为了使用经常用的功能(继承功能),更方便所以设计了内部类。
5,内部类和匿名内部类的继承区别?
没有本质区别,内部类的继承就是普通的继承。(能扩展,能继承)
匿名内部类只能继承,不能扩展。
6,匿名内部类的继承和普通的继承区别?
不能扩展(不能写自己的方法)。只能实现继承来的方法。
7,匿名内部类和普通内部类继承的代码实现?
匿名内部类是普通内部类继承的简写:
1,匿名内部类new的是接口,所以需要实现接口的方法。所以说是简写。
但是匿名内部类无法扩展。
普通内部类继承接口:
public class pacel
{
public static void main(String[]
args) {
ou
4000
ter
outs = new outer();
intence
inten= outs.returnInner();
inten.prt();
}
}
class outer {
private class inner
implements intence{
public void prt(){
System.out.println("this
is inner function!!!");
}
}
public
intence returnInner(){
return
new inner();
}
}
interface intence{
public void prt();
}
匿名内部类继承接口:
public class anonymous
{
public contents content(){
return
new contents(){
public
void prt() {
ppp();
System.out.println("this
is anonymous class!"+str);
}
};
}
public static void main(String[]
args) {
anonymous anony
= new anonymous();
contents
conts = anony.content();
conts.prt();
}
}
interface contents{
void prt();
}
相关文章推荐
- 为什么要设计接口内部类?要解决什么问题?
- 系统设计规范化解决了什么问题
- 要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。
- 基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?
- 微软为什么不解决掉USERCONTROL的设计时问题
- 泛型是什么,为什么要使用泛型,泛型的出现是解决什么问题的
- TRIZ发明问题解决理论——本质是分析问题中的矛盾,利用资源(时间空间物质能量功能信息等)来解决矛盾从而解决问题——抽象出来:问题是什么,为什么?
- 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解
- yarn是什么?为什么会产生yarn,它解决了什么问题?以及yarn的执行流程
- 为什么设计静态嵌套类?它要解决什么样的问题?
- jQuery实例化的优势,为什么要有实例化,到底实例化后在解决什么问题?
- 急求高手帮忙解决,Java Script Error Description缺少对象,是什么原因,为什么我的网站老是出现这个问题
- yarn是什么?为什么会产生yarn,它解决了什么问题?以及yarn的执行流程
- 尝试用AOP解决OOP和设计模式问题(1)
- 应用框架的设计与实现——.NET平台4.2代码测试问题解决
- 组合设计模式,解决struts只能有一个资源文件的问题
- 系统分析设计 一个JOIN问题解决方案的感想 重视业务分析设计
- 解决VS2005在窗体设计界面中数据源窗口灰化不显示数据源的问题
- linux下不能解决的问题到底有什么?
- 尝试用AOP解决OOP和设计模式问题(2)