<<内部类>>--黑马程序员

发布时间:2016-12-10 14:54:44 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"<<内部类>>--黑马程序员",主要涉及到<<内部类>>--黑马程序员方面的内容,对于<<内部类>>--黑马程序员感兴趣的同学可以参考一下。

------- android培训、java培训、期待与您交流! ---------- 1. 内部类的概括。    把一个类中定义在另一个类,这个类就叫做:内部类,或者是嵌套类,内置类.     定义内部类的原则:描述事物的同时还有内部事物,此事物内部类,内部事物访问外部事物。 2. 内部类之间的调用关系       2-1.内部类和外部类之间的理论调用                   1.  内部类访问外部类的成员,可以直接访问,包括私有成员----因为内部类中持有一个外部类的引用,格式:外部类名.this             2.外部类访问内部类必须通过内部类的对象进行访问内部类的成员。             3.要是在其他的类中调用内部类成员切内部类不是私有,先获得内部类对象,内部类对象获得的方式:外部类.内部类 名称=外部类对象.内部类对象,例如:(Outer.Innerin=new Outer().new Inner())        2-2.内部类与外部类之间公共变量,局部变量之间的调用                          1.外部类和内部类调用的是名称不相同的变量 public class Outer { private int x = 3; class Inner { private String name="zhangsan"; /** * 内部类之间方法外部类的私有成员变量 */ public void show() { System.out.println("这是内部类中的方法"); System.out.println("直接方法外部类中的成员变量:"+x); } } /** * 在外部类访问内部类的成员 */ public void function(){ Inner inter=new Inner(); System.out.println("在外部类调用内部类的私有属性:"+inter.name); } } public class Text { public static void main(String[] args) { Outer.Inner in=new Outer().new Inner();//在其他类中实例化内部类对象 in.show(); new Outer().function();//调用外部类方法 } } 结果:这是内部类中的方法 直接方法外部类中的成员变量:3 在外部类调用内部类的私有属性:zhangsan                        2.内部类和外部类调用相同名称的变量。(内部类默认权限) public class Outer { private int x = 3; class Inner { private int x=10; /** * 内部类和外部类有相同名称的变量,和方法中的局部变量的名称相同 */ public void show() { int x=20;//局部变量 System.out.println("直接方法局部变量:"+x); System.out.println("访问内部类的相同名称的成员:"+this.x); System.out.println("访问外部类的相同名称的成员:"+Outer.this.x); } } } public class Text { public static void main(String[] args) { Outer.Inner in=new Outer().new Inner();//在其他类中实例化内部类对象 in.show(); } }     结果: 直接方法局部变量:20 访问内部类的相同名称的成员:10 访问外部类的相同名称的成员:3   3.静态内部类(用static修饰内部类)。      3-1.静态内部类只能调用外部类的静态成员(static修饰的)。      3-2.外部其他类访问静态内部类的非静态成员,         New 外部类.内部类().非静态成员       外部类其他类访问静态内部类的静态成员       New 外部类.内部类.静态成员 public class Outer { static class Inner { public static String name = "张三"; public void show() { System.out.println("静态内部类的非静态成员"); } } } public class Text { public static void main(String[] args) { new Outer.Inner().show();// 外部类其他类访问静态内部类的非静态成员 System.out.println(Outer.Inner.name);// 外部类其他类访问静态内部类的静态成员 } }      3-3.当内部类中定义了静态成员,该内部类必须是静态的。      当外部类中的静态方法调用内部类的时候,内部类必须是静态的。     public class Outer { static class Inner { public void show() { System.out.println("show()"); } } public static void function(){ new Inner().show();//这里会编译出错, //因为,此静态的方法只要是类一加载,那么此方法就会生成, //但是内部类是默认权限,不是外部类的静态成员,此时外部类一加载, //此内部类不会加载,但是外部类的静态方法却调用了此内部类,所以会出错, //解决方法是:把内部类定义成静态的 } }                3-4:内部类定义在局部时。 不能被成员修饰符修饰(static ),因为方法中不能定义成员,只能定义局部变量,同时此时的内部类就不能定义静态的变量。  不能访问他所在的局部中的的成员,但是此成员必须被final修饰。 public class Outer { class Inner { public void show() { final int x=1; class aa{ public void func(){ System.out.println(x); } } new aa().func(); } } }   4.匿名内部类。       4-1.匿名内部类的概念     匿名内部类就是内部类的一种简化书写。      4-2.匿名内部类的书写和前提。              1.要向书写内部类,此类必须继承一个类或者是接口。     2.内部类的格式:new 父类或者是接口(){子类的内容}     3.其实匿名内部类其实就是一个子类的对象。     4.一个内部类中最多重写三个方法,多了最好定义一个类,然后继承父类。      4-3.匿名内部类的优点和缺点。    匿名内部类简化了代码,但是代码的阅读性比较差。     4-4.匿名内部类的结构图。     带名字的匿名内部类 abstract class ABC { public abstract void show(); } public class Outer { public void method() { ABC news=new ABC() { public void show() {// 重新show()方法 System.out.println("show"); } }; news.show();// 调用show()方法 } }     4-5.匿名内部类小测试 interface Inter { void method(); } class Test { static Inter function(){ return new Inter(){ public void method(){ System.out.println("method"); //这是补充的代码 } }; } } public class InnterClassText { public static void main(String[] args) { Test.function().method(); } }    4-6.匿名内部类的常见形式。 interface Inter { void method(); } public class InnterClassText { public static void main(String[] args) { show(new Inter(){ public void method(){ System.out.println("show run"); } });//使用匿名内部类作为show方法的传入的参数 } public static void show(Inter in){ in.method(); } }    4-7.小转脑筋题。  假如一个类没有父类也没有实现接口,那么它可以定成内部类吗?请思考! 首先答案是肯定的,可以这样写。使用Object类。 public class InnterClassText { public static void main(String[] args) { new Object() { public void function() { System.out.println("helloworld"); } }.function(); } } 但是如果是这样的话,就不正确了! public class InnterClassText { public static void main(String[] args) { Object oo=new Object() { public void function() { System.out.println("hello world"); } }; oo..function();//在这里会出错,因为在java虚拟机中没有给Object类中没有funtion()方法 } }      ------- android培训、java培训、期待与您交流! ----------  

上一篇:WebLogic11g|Oracle WebLogic Server 11gR1|下载
下一篇:使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .

相关文章

相关评论