class Outer{ //定义外部类
private String title="Hello World";
public void fun(){
new Inner().print();
}
class Inner { //定义内部类
public void print(){
System.out.println(title); //title可写作Outer.this.title
}
}
}
public class outin {
public static void main(String args[]){
Outer out=new Outer();
out.fun();
}
}
因为内部类可以访问外部类中的属性,所以内部类产生之前,一定要准备好外部类。
main方法也可以写作
public static void main(String args[]){
Outer.Inner in = new Outer().new Inner();
in.print();
}
在外部产生了内部类对象并调用内部类中的操作方法
直接访问内部类的私有属性
class Outer{ //定义外部类
private String title="Hello World";
class Inner { //定义内部类
private String msg="你好"; //私有属性
public void print(){System.out.println(title);}
}
public void fun(){
Inner in=new Inner();
System.out.println(in.msg); //直接访问私有属性
}
}
public class outin {
public static void main(String args[]){
Outer out=new Outer();
out.fun();
}
}
内部类和外部类的私有属性都是可以互相直接访问的。
对于内部类而言也可以使用static关键字进行定义,使用了static定义的内部类严格来讲就变为了一个外部类。
外部类.内部类 内部类对象=new 外部类.内部类()
class Outer{
private static String info="Hello";//必须是static
static class Inner{
public void print(){
System.out.println(info);
}
}
}
public class outin {
public static void main(String args[]){
Outer.Inner in = new Outer.Inner();
in.print();
}
}
内部接口的实现
如果在定义内部接口的时候使用了static,那么就表示定义的是外部接口。
interface A{
interface B{
public void printB();
}
}
class X implements A{
class Y implements B{
public void printB(){}
}
}
利用static定义外部接口
interface A{
static interface B{
public void printB();
}
}
class X implements A.B{
public void printB(){}
}
匿名内部类
一般写法
interface A{
public void fun();
}
class X implements A{
public void fun(){System.out.println("HelloWorld");}
}
public class outin{
public static void main(String args[]){
A a=new X();
a.fun();
}
}
匿名内部类写法
interface A{
public void fun();
}
public class outin{
public static void main(String args[]){
A a=new A(){
public void fun(){ // 对fun方法进行覆写
System.out.println("HelloWorld");
}
};
a.fun();
}
}
Java中除了Object类之外,所有的类都会存在有继承关系,如果一个类没有明确继承另一个类,贼默认情况下会让其默认继承为Object
class Book (extends Object)