内部类
成员内部类
- 内部类就是在一个类中定义一个类。比如:在一个A类的内部定义一个B类,B类就被称为内部类
- 按照内部类在类中定义的位置不同,可以分为
- 在类的成员位置:成员内部类
- 在类的局部位置:局部内部类
内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
成员内部类
- 普通的成员内部类
- 私有的成员内部类:private
- 私有成员内部类访问:在自己所在的外部类中创建对象访问
- 静态的成员内部类:static
- 静态成员内部类访问格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
- 静态成员内部类的静态方法:外部类名.内部类名.方法名();
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 package com.yishan.mynbl;
/**
* 成员内部类
* 普通的成员内部类
* 私有的成员内部类
* 静态的成员内部类
* @author : yishan
* @date : 2020-12-28 23:47
*/
public class test01 {
public static void main(String[] args) {
System.out.println("----普通的成员内部类----");
Animal.Dog dog = new Animal().new Dog();
dog.eat();
System.out.println("dog.age = " + dog.age);
System.out.println("-------私有的成员内部类-------");
Animal animal = new Animal();
animal.showCat();
System.out.println("------静态的成员内部类------");
Animal.Fish fish = new Animal.Fish();
fish.eat();
}
}
class Animal{
int age = 13;
public void show(){
//外部类访问内部类,需要创建对象
Dog dog = new Dog();
System.out.println("dog.age = " + dog.age);
dog.eat();
}
/**
* 普通的成员内部类
*/
class Dog{
int age = 12;
//内部类访问外部类,可以直接访问
void eat(){
System.out.println("吃骨头");
}
}
/**
* 私有的成员内部类
*/
private class Cat{
void eat(){
System.out.println("吃鱼");
}
}
void showCat(){
Cat cat = new Cat();
cat.eat();
}
/**
* 静态的成员内部类
*/
static class Fish{
void eat(){
System.out.println("我是鱼");
}
}
}
局部内部类
- 局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量
匿名内部类
- 匿名内部类式将(继承/实现)(方法重写)(创建对象)三个步骤,放在了一步进行
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 package com.yishan.myniming;
/**
* 匿名内部类
* @author : yishan
* @date : 2020-12-29 11:15
*/
public class Test01 {
public static void main(String[] args) {
System.out.println("---标准调用---");
DogImpl dog = new DogImpl();
dog.eat();
System.out.println("---匿名内部类---");
//匿名内部类
IEat eatAll = new IEat(){
public void eat() {
System.out.println("猫吃鱼!");
}
public void drink() {
System.out.println("喝牛奶");
}
};
eatAll.eat();
eatAll.drink();
}
}
interface IEat{
void eat();
void drink();
}
class DogImpl implements IEat{
public void eat() {
System.out.println("狗啃骨头!");
}
public void drink() {
System.out.println("喝水");
}
}
局部内部类
服务于方法 用的很少
String基础
测试String类
package cn.yishan.oop;
1 | public class TestString { |