黑马程序员 java 基础 毕向东 面向对象 内部类访问规则
2014-09-14 21:47
579 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
黑马程序员 java 基础 毕向东 第9天 面向对象 内部类访问规则
内部类
2:外部类访问内部类,必须建立内部类对象
直接访问内部类的成员:
之所以可以直接访问外部类的成员,因为内部类持有内部类的引用,写法为
内部类.this
而 外部类访问内部类,必须先建立内部类的对象
访问格式:
1:当内部类定义在外部类的成员位置上,且非私有,可以在外部其他类中,
可以直接建立内部类对象
格式:
外部类名.内部类名 变量名=外部类对象.内部类对象;
2:当内部类在成员位置上,就可以被成员修饰符修饰,比如private
static :内部类就具备了静态特性;
当描述事物时,事物内部还有事物,该事物用内部类表示
因为内部类事物在使用外部类 的内容
2:定义匿名内部类的前提
内部类必须继承一个类或者实现接口
3:匿名内部类的格式:
new 父类或者接口(){
定义子类的内容
}
4:匿名内部类就是一个匿名子类对象,这个对象有点胖,也可以理解为带内容的对象
5:匿名内部类中定义的方法最好不要超过3个
相关代码
------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
测试题:
《黑马程序员 java 基础 毕向东 面向对象 内部类访问规则》
介绍了java中内部类的使用方法和使用情景。
黑马程序员 java 基础 毕向东 第9天 面向对象 内部类访问规则
内部类
内部类的访问规则:
1:内部类可以直接访问外部类的成员,包括私有 的2:外部类访问内部类,必须建立内部类对象
直接访问内部类的成员:
之所以可以直接访问外部类的成员,因为内部类持有内部类的引用,写法为
内部类.this
而 外部类访问内部类,必须先建立内部类的对象
访问格式:
1:当内部类定义在外部类的成员位置上,且非私有,可以在外部其他类中,
可以直接建立内部类对象
格式:
外部类名.内部类名 变量名=外部类对象.内部类对象;
2:当内部类在成员位置上,就可以被成员修饰符修饰,比如private
static :内部类就具备了静态特性;
当描述事物时,事物内部还有事物,该事物用内部类表示
因为内部类事物在使用外部类 的内容
匿名内部类:
1:就是内部类的简写格式2:定义匿名内部类的前提
内部类必须继承一个类或者实现接口
3:匿名内部类的格式:
new 父类或者接口(){
定义子类的内容
}
4:匿名内部类就是一个匿名子类对象,这个对象有点胖,也可以理解为带内容的对象
5:匿名内部类中定义的方法最好不要超过3个
相关代码
------------------------------------------------------------------------------------
package day09; public class InnerClassDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Outer outer=new Outer(); outer.function(1); outer.function(2); } } class Outer{ private int x=3; private static int xx=22; void function(final int a){ final int y=4; class Inner2{ void show(){ System.out.println("innser show"); System.out.println(a); System.out.println(y); //内部类定义在局部,不可以被成员修饰符修饰 //可以直接访问外部类中的成员,以为持有外部类的引用 //但不可以访问所在局部中的变量。除非被final修饰 } } new Inner2().show(); } }--------------------------------------------------------------------------------
package day09; public class InnerClassDemo3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Outer3 outer3=new Outer3(); outer3.method(); //如何访问静态内部类呢 new Outer3.StaticInner().function(); } } class Outer3{ private int x=3; private static int xx=22; // class Inner{ //当内部类中定义了静态成员,该内部类必须为静态的 //当外部类的静态方法访问内部类时。内部类必须为静态的 // int x=6; // void function(){ // int x=4; // System.out.println("innser :"+x); // System.out.println("innser :"+this.x); // System.out.println("outer:"+Outer.this.x); // } // } public static void method2(){ StaticInner.function(); //new Inner2().show() 不成功 } static class StaticInner{//静态内部类 // int x=6; static void function(){ // int x=4; System.out.println("innser 3:"+xx); // System.out.println("innser :"+this.x); } } void method(){ // Inner inner=new Inner(); // inner.function(); StaticInner inner=new StaticInner(); inner.function(); class Inner2{ void show(){ System.out.println("innser show"); } } } // // class Body{ // private class XinZang{ // // } // public void show() { // new XinZang(); // } // } }
--------------------------------------------------------------------------------
package day09; public class InnerClassDemo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new Outer4().function(); } } abstract class Absdemo{ abstract void show1(); abstract void show2(); abstract void show3(); } class Outer4{ int x=3; /* class Inner extends Absdemo{ void method(){ System.out.println("method :"+x); } @Override void show() { // TODO Auto-generated method stub System.out.println("show :"+x); } }*/ public void function() { // new Inner().method(); // new Inner().show(); Absdemo aaAbsdemo=new Absdemo(){ int numm=99; @Override void show1() { // TODO Auto-generated method stub System.out.println("show neibu :"+x); System.out.println("show neibu :"+numm); } @Override void show2() { // TODO Auto-generated method stub System.out.println("show neibu :"+x); } @Override void show3() { // TODO Auto-generated method stub System.out.println("show neibu :"+x); } void show34() { // TODO Auto-generated method stub System.out.println("show neibu :"+x); } }; aaAbsdemo.show1(); aaAbsdemo.show2(); aaAbsdemo.show3(); //aaAbsdemo.show34();//编译失败 } }
--------------------------------------------------------------------------------
package day09; public class InnerClassTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test.funtion().method(); Inter inter=Test.funtion(); inter.method(); show(new Inter() { @Override public void method() { // TODO Auto-generated method stub System.out.println("0000000000000000"); } }); new Object(){ void funtion(){ System.out.println("object"); } }.funtion(); //Test.funtion() :test 类中有静态方法funtion //.method(): funtion 方法结果为inter 对象 } public static void show(Inter args) { // TODO Auto-generated method stub args.method(); } } interface Inter{ void method(); } class Test{ //补足代码,通过匿名类 static Inter funtion(){ return new Inter(){ @Override public void method() { // TODO Auto-generated method stub System.out.println("Test -》funtion-》Inter-》method"); } }; } }
测试题:
package day09; class TestB extends TestA{ TestB(){ System.out.println("Test B"); } } public class TestA { TestA(){ System.out.println("Test A"); } public static void main(String[] args) { TestB testB=new TestB(); } } /* class Super { int i=0; public Super(String s) { i=1; } } class DemoA extends Super { public DemoA(String s) { i=2; } public static void main(String[] args) { DemoA d=new DemoA("yes"); System.out.println(d.i); } } */ /* class Super { public int get(){return 4;} } class Demo15 extends Super { public long get(){return 5;} public static void main(String[] args) { Super s=new Demo15(); System.out.println(s.get()); } } */ class DemoAA { public void func() { //位置1; new Inner(); } class Inner{} public static void main(String[] args) { DemoAA d=new DemoAA(); // 位置2 // new Inner();//不可以,因为主函数是静态的。如果访问inner需要被static修饰。 new DemoAA().new Inner(); } } /* * * A.在位置1写 new Inner();//ok B.在位置2写 new Inner(); C.在位置2写 new d.Inner();//错误,格式错误。 new new Demo().Inner(); D.在位置2写 new Demo.Inner();//错误,因为inner不是静态的。 */
《黑马程序员 java 基础 毕向东 面向对象 内部类访问规则》
介绍了java中内部类的使用方法和使用情景。
相关文章推荐
- 黑马程序员 java 基础 毕向东 面向对象 String StringBuffer StringBuilder 基本数据类型包装类
- 黑马程序员 java 基础 毕向东 面向对象 异常 以及 package 的使用
- 黑马程序员——Java基础---面向对象(封装、继承、单例、抽象类、接口、内部类)
- 黑马程序员--Java基础学习笔记【参数传递、访问控制符、内部类】
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员_毕向东JAVA基础_面向对象(封装&继承&多态)
- 黑马程序员-(10)Java基础之面向对象(五)内部类
- 黑马程序员——Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- 黑马程序员 java 基础 毕向东 面向对象 多线程
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
- 黑马程序员——java基础(面向对象)抽象、接口、内部类
- 黑马程序员 java 基础 毕向东 面向对象 IO流操作
- 黑马程序员 java 基础 毕向东 面向对象 常用类 System Math Property Calendar Date Runtime
- Java基础之内部类(2)---内部类的访问规则
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员 java 基础 毕向东 面向对象 IO操作 File Properties PrintWriter PrintStream 应用
- 黑马程序员 java 基础 毕向东 面向对象 多线程 通信 优化 jdk 1.5 之后新特性Lock
- 黑马程序员 Java基础 面向对象:内部类 异常 包 jar包
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 黑马程序员_day09 面向对象(内部类访问规则,静态内部类,内部类定义原则,匿名内部类)