java中内部类

package com.xt.instanceoftest;

import com.xt.instanceoftest.Body.Heart;

public class StaticInnerClass {

    //静态内部类必须直接定义在外部类中
    static class Student{
        public void study() {
            System.out.println("xuexi...");
        }
    }
    
    
    public static void main(String[] args) {
        Student s = new Student() {
            
        };
        s.study();
        
        class S extends Student{
            
        }
        Student s1=new S();
        s1.study();
        Heart heart = new Body.Heart();
    }
}

 


//只有静态有名内部类才能定义静态代码块,静态变量 ,静态方法。
    static class Mammal{
        static {
            
        }
        static int a=0;
        static void print() {
            
        }
    }
    
    
    

 

package com.xt.instanceoftest;

public class PrivateInnerClass {

    //son 是一个上转型对象  而上转型对象是不能调用子类新增的成员变量和方法的
    public static void main(String[] args) {
          new Parent() {//匿名内部类不能有构造方法,不能使抽象类 因为都没名字 无法被new和继承
            int a;//这些新增的属性和方法是不能被上转型对象调用的
            public void walk() {
                System.out.println("子类走。。。");
            }
          };
    }
}

class Parent{
    
    public void walk() {
        System.out.println("父类走。。。");
    }
}

 

有名内部类



1
package com.xt.innerClass; 2 3 public class Body { 4 5 class Heart{ 6 public void beat() { 7 System.out.println("心脏在跳动。。"); 8 } 9 } 10 11 public static void walk() { 12 System.out.println("身体在走路。。"); 13 } 14 15 public static void main(String[] args) { 16 Body body = new Body(); 17 Body.walk(); 18 Heart heart = body.new Heart(); 19 heart.beat(); 20 } 21 }

 

内部类不能在默认包中!!!!!!!!!!!!!!

重点是匿名内部类

匿名内部类必须是继承父类(普通类  抽象类)的子类或接口的实现类

匿名内部类没有构造方法:因为他本来就没有类名,所有也就没有new  类名()这一说了,

匿名内部类不能使抽象类:因为没有类名,不能被其他类继承。

 

注意!!!!!!!!可以在匿名内部类中添加新的属性和方法,但是这些属性和方法不能被上转型对象所调用,只能被非上转型对象方式创建的匿名内部类对象所调用

上转型对象是不能调用子类新增的成员变量和方法的

 

静态内部类只能定义在外部类里面

只有静态有名内部类才能定义静态代码块,静态变量 ,静态方法。

 

静态内部类仅能直接访问外部类的静态成员变量和方法,可以通过创建外部类的对象间接使用非静态的成员变量和方法。

 

 

 

 

 

内部类可以直接定义在类中,也可以定义在方法或代码块中;其中直接定义在外部类中的内部类可以有public、protected、默认的和private四种访问权限修饰(普通外部类、接口和抽象类只能使用public和default修饰),也可以使用static修饰( static不能修饰普通外部类、接口和抽象类);但是定义在方法或代码块中的内部类不能有访问修饰符修饰,也不能有static修饰。


内部类可以访问外部类的所有访问权限的成员变量

在局部变量作用的范围内,如果定义的内部类需要使用该局部变量,则该变量必须有final修饰。

 

posted @ 2018-05-21 21:05  木&子  阅读(164)  评论(0编辑  收藏  举报