Java基础班 第十天(下) 内部类

1.内部类概述和访问特点

A:内部类概述
* B:内部类访问特点
    * a:内部类可以直接访问外部类的成员,包括私有。
    * b:外部类要访问内部类的成员,必须创建对象。
    * 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
* C:案例演示
    * 内部类极其访问特

class  Demo1_Inner
{
	public static void main(String[] args) 
	{
		//Outer.Inner oi = new Outer().Inner();
		Outer.Inner oi;
		oi = new Outer().new Inner();
		
		oi.print();
	}
}
class Outer
{
	private int age = 10;
	class Inner
	{
		public void print(){
			System.out.println("Hello World!");
		}
	}
}

2 内部类私有

class  Demo2_Inner
{
	public static void main(String[] args) 
	{
		//Outer.Inner oi = new Outer().Inner();
		//Outer.Inner oi;
		//oi = new Outer().new Inner();
		
		//oi.print();
		Outer o = new Outer();
		o.print();
	}
}
class Outer
{
	private int age = 10;
	private class Inner
	{
		public void print(){
			System.out.println("Hello World!");
		}
	}
	public void print(){
		Inner i = new Inner();
		i.print();
	}
}

3  内部类用静态修饰

这个创建方式和第一节的代码有微妙的区别

class  Demo3_Inner
{
	public static void main(String[] args) 
	{
		//Outer.Inner oi = new Outer().Inner();
		//Outer.Inner oi;
		//oi = new Outer().new Inner();
		
		//oi.print();
		//Outer o = new Outer();    
		//o.print();
		Outer.Inner oi = new Outer.Inner();   //和前面对比创建对象的方式 是不一样的
		oi.print();
	}
}
class Outer
{
	private int age = 10;
	static class Inner
	{
		public void print(){
			System.out.println("Hello World!");
		}
	}
	public void print(){
		Inner i = new Inner();
		i.print();
	}
}

10.11内部类面试题 

这个里面就是一个代码,填三个空 num this.num  outer.this.num

10.12局部内部类 

前面都是讲内部类  这个开始讲局部内部类  这个类只能在方法中声明并且存在 

10.13 匿名内部类

这个代码比较复杂,自己多研究一下,用两种方法做了一下,一种是直接内部类,一种是匿名内部类,自己在写匿名内部类的时候 最后忘加 。print()方法了。

A:匿名内部类
    * 就是内部类的简化写法。
* B:前提:存在一个类或者接口
    * 这里的类可以是具体类也可以是抽象类。
* C:格式:

        new 类名或者接口名(){
            重写方法;
        }
* D:本质是什么呢?
    * 是一个继承了该类或者实现了该接口的子类匿名对象。
* E:案例演示
    * 按照要求来一个匿名内部类

class  Demo1_Outer
{
	public static void main(String[] args) 
	{
		
		//System.out.println("Hello World!");
		Demo dd;
		dd = new Demo();
		dd.method();
	}
}
interface Inter
{
	public void print();
}
class Demo
{
	/*class Demo1 implements Inter
	{
		public void print(){
			System.out.println("Hello World!");
		}
	}*/
	public void method(){
		//Demo1 d;
	//	d = new Demo1();
		//d.print();
		new Inter(){
			public void print(){
				System.out.println("Hello World!");
			}
		}.print();
	}
}

 

10.14 匿名内部类第二节 

这就是一个练习

这种匿名内部类  不用再子类里那种声明对象 创建对象  像局部内部类的那种方式不需要  直接在测试类创建就可以

class Demo2_Outer 
{
	public static void main(String[] args) 
	{
	//System.out.println("Hello World!");
	Outer o;
	o = new Outer();
	o.method();
	}
}
interface Inter
{
	public void show1();
	public void show2();
}
class Outer
{
	public void method(){
		new Inter(){
			public void show1(){
				System.out.println("show1");
			}
			public void show2(){
				System.out.println("show2");
			}
		}.show1();
		new Inter(){
			public void show1(){
				System.out.println("show1");
			}
			public void show2(){
				System.out.println("show2");
			}

		}.show2();
	}
	//不用在内部创建对象了 

}

10.15 匿名内部类的一个练习 

这个是说 pd.method()里面填什么好  两种填充方式 

// pd.method()中的括号里面填什么东西

class Demo3_Outer 
{
	public static void main(String[] args) 
	{
		//System.out.println("Hello World!");
		personDemo pd = new personDemo();
		pd.method(new student());
		pd.method(new Person(){
			public void show(){
				System.out.println("Hello World!");
			}
		});
	}
}
abstract class Person
{
	public abstract void show();
}
class personDemo
{
	public void method(Person p){
		p.show();
	}
}
class student extends Person
{
	public void show(){
		System.out.println("Hello World!");
	}
}

 

    原文作者:上去开团
    原文地址: https://blog.csdn.net/weixin_40079205/article/details/82959306
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞