java-内部类

内部类:

嵌套在另一个类中定义的类就是内部类。包含内部类的类就是外部类

内部类声明

class outer{    //外部类
    int outer_x = 100;    //外部类成员
    class inner{    //内部类
        void display(){
            System.out.println("display : " + outer_x);    //内部类成员
        }
    }
}    

静态方法(全局方法):

既没有访问this的属性,也没有访问this 的方法,是一种特殊的方法

java语言里,静态方法用static修饰

静态方法里不能访问this,它跟类没有关系

成员式内部类——对象成员内部类

内部类中访问外部类:

在内部类中访问外部类,就像同一个类中成员互相访问一样,是没有限制的,包括声明为private的成员

class outer{
    int i = 100;
    class inner{
        public void method(){
            System.out.println("外部类中的成员变量:   " + i);
           }
        }
}
public class HelloWorld {
	public static void main(String[] args) {
        outer.inner in = new outer().new inner();//可以拆分成两条语句
	//outer ot = new outer();
	//outer.inner in = ot.new inner();
	    in.method();
	}
}

method方法可以直接访问外部类成员变量i

外部类中访问内部类:

在外部类中访问内部类是比较容易的,只要把内部类看成是一个类,然后创建该类的对象,使用对象来调用内部类的成员即可

class outer{
	int j;
	class inner{
		int i = 30;
	}
	public void method()
	{
		inner in = new inner();
		int j = in.i;
		System.out.print("内部类变量的值: " + j);
	}	
}
public class HelloWorld {
	public static void main(String[] args) {
        outer ot = new outer();
		ot.method();
	}
}

内部类本身仍是一个类,所以在它内部定义了变量i。如果想要访问变量i,就要先产生一个内部类的对象in,通过对象来访问成员变量i

在外部类外访问内部类:

先创建一个外部类的对象,然后让该外部类对象调用创建一个内部类对象

class outer{
	class inner{
		int i = 50;
		int j = 100;
	}
}
public class HelloWorld {
	public static void main(String[] args) {
        outer.inner in1 = new outer().new inner();    //两种基本语法
		outer ot = new outer();
		outer.inner in2 = ot.new inner();
		System.out.println("内部类中的变量i: " + in1.i);
		System.out.println("内部类中的变量j: " + in2.j);
	
	}
}

在外部类外访问内部类时,是不能够直接创建内部类对象的,因为内部类只是外部类的一个成员,所以,要想创建内部类对象,首先要创建外部类对象,然后以外部类对象为标识来创建内部类对象

成员时内部类——静态内部类

创建静态内部类

class outer{
    static class inner{    //静态内部类
        //内部类成员
    }
//外部类成员
}

对于静态内部类来说,它只能访问其封装类中的静态成员

在外部类中访问静态内部类

与非静态内部类一样

class outer{
	static class inner{
		int i = 50;
		static int k = 100;
	}
	public void method(){
		inner in = new inner();
		int j = in.i;
		System.out.println("静态内部类的实例变量值为:" + j);
		System.out.println("静态内部类的静态变量值为:" + inner.k);
	}
}
public class HelloWorld {
	public static void main(String[] args) {
	outer ot = new outer();
		ot.method();
	}
}

在外部类外访问静态内部类

class outer{
	static class inner{
		int i = 50;
		static int j = 100;
	}
}
public class HelloWorld {
	public static void main(String[] args) {
        outer.inner in = new outer.inner();
		System.out.println("静态内部类的实例变量i: " + in.i );
		System.out.println("静态内部类的静态变量j: " + outer.inner.j);
	}
}

访问静态内部类的静态成员时时不需要创建内部类对象的,但是在访问静态内部类的非静态成员时仍需要创建内部类对象

局部内部类:

创建局部内部类

class outer{
    public void method(){
        class inter{    //局部内部类
            int i = 50;    //局部内部类的成员变量
        }
    inner n = new inner();
    System.out.println("局部内部类的变量为: " + n.i);
}
public class HelloWorld {
	public static void main(String[] args) {
		outer ot = new outer();    //创建外部类对象
		ot.method();    //调用内部类成员
	}
}

在局部内部类中访问外部类成员变量

class outer{
	int i = 30;
	public void method() {
		class inner{    //定义局部内部类
			public void innermethod(){
				System.out.printf("外部类成员变量i:  " + i);
			}
		}
		inner n = new inner();
		n.innermethod();
	}
}

public class HelloWorld {
	public static void main(String[] args) {
        outer ot = new outer();    //创建外部类对象
		ot.method();    //调用内部类中成员
	}
}

匿名内部类:

匿名内部类总是用来扩展一个现有的类,或者实现一个接口

匿名内部类是没有名字的,在创建匿名内部类时要同事创建匿名内部类的对象

new innerfather()
//innerfather是匿名内部类继承的父类的类名或实现的接口名,用new来创建匿名内部类的对象
{
    //匿名内部类
};
class innerfather
{
	public void method()	//父类中的方法
	{
		System.out.println("内部类父类方法");
	}
}
public class HelloWorld {
	public static void main(String[] args) {
	        innerfather nf = new innerfather() {    
            //创建匿名内部类,实例化对象是innerfather的子类对象
			public void method()
			{
				System.out.println("匿名内部类的方法");
			}
		};
		nf.method();    //调用匿名内部类的方法
	}
}

扩展:

Math类:

abs(a)a的绝对值

pow(a,b)  a的b次幂

sqrt(a)  a的平方根

roud(a) 四舍五入

sin/cos/tan

调用:

类名+方法名

Math.sqrt(4);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窗外藏深海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值