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!");
}
}