前言:
眼前朋友们对“java私有类怎么创建”大体比较注意,姐妹们都想要剖析一些“java私有类怎么创建”的相关知识。那么小编在网上网罗了一些关于“java私有类怎么创建””的相关文章,希望小伙伴们能喜欢,咱们一起来学习一下吧!概念
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
什么时候使用内部类
一个事物内部还有一个独立的事物,内部的事物脱离外部的事物无法独立使用
比如汽车只有一个发动机,电脑只有一个CPU
内部类的分类
按定义的位置来分
1. 成员内部内,类定义在了成员位置 (类中方法外称为成员位置)
2. 局部内部类,类定义在方法内
成员内部类
成员内部类:定义在类中方法外的类。
格式
class 外部类 {
// 成员变量
// 成员方法
class 内部类 {
// 成员变量
// 成员方法
}
}
在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类Car中包含发动机类Engine,这时,Engine就可以使用内部类来描述,定义在成员位置。
示例
class Car { //外部类
class Engine { //内部类
}
}
访问特点
内部类可以直接访问外部类的成员,包括私有成员。
创建内部类对象格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
示例
public class Body {
public boolean live = true;
public void walk() {
System.out.println("散散步");
}
class Heart {
public void jump() {
// 直接访问外部类成员
if (live) {
System.out.println("脚离地了");
} else {
System.out.println("智商又占领高地了");
}
}
}
}
测试类
public class Test {
public static void main(String[] args) {
// 外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
// 创建的是内部类对象
// Body.Heart heart = new Body().new Heart();
// heart.jump();
// 创建方式2:先创建外部类,再创建内部类
// 创建外部类对象
Body b = new Body();
// 创建内部类对象
Body.Heart heart = b.new Heart();
// 调用内部类方法
heart.jump();
// 调用外部类方法
b.live = false;
// 调用内部类方法
heart.jump();
}
}
局部内部类
局部内部类:定义在方法中的类。
格式
class 外部类名 {
数据类型 变量名;
修饰符 返回值类型 方法名(参数列表) {
// …
class 内部类 {
// 成员变量
// 成员方法
}
}
}
使用: 在定义好局部内部类后,直接就创建对象
访问特点
内部类可以直接访问外部类的成员,包括私有成员。
匿名内部类(重点)
匿名内部类:是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。开发中,最常用到的内部类就是匿名内部类了。
之前我們使用接口时,似乎得做如下几步操作:
1. 定义子类
2. 重写接口中的方法
3. 创建子类对象
4. 调用重写后的方法
interface Swim {
public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
// 2. 重写抽象方法
@Override
public void swimming() {
System.out.println("仰泳");
}
}
public class Test {
public static void main(String[] args) {
// 3. 创建实现类对象
Student s = new Student();
// 4. 调用方法
s.swimming();
}
}
我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。
匿名内部类前提
匿名内部类必须继承一个父类或者实现一个父接口。
格式
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};
使用方式
示例
interface Swim {
public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
// 2. 重写抽象方法
@Override
public void swimming() {
System.out.println("仰泳");
}
}
public class Test {
public static void main(String[] args) {
// 使用匿名内部类
new Swim() {
@Override
public void swimming() {
System.out.println("蛙泳");
}
}.swimming();
// 接口 变量 = new 实现类(); 多态,走子类的重写方法
Swim s2 = new Swim() {
@Override
public void swimming() {
System.out.println("游泳");
}
};
s2.swimming();
s2.swimming();
}
}
匿名内部类的本质
1. 定义一个没有名字的内部类
2. 这个类实现了Swim接口
3. 创建了这个没有名字的类的对象
匿名内部类的作用
简化代码
匿名内部类的使用场景
通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。示例:
interface Swim {
public abstract void swimming();
}
// 1. 定义接口的实现类
class Student implements Swim {
// 2. 重写抽象方法
@Override
public void swimming() {
System.out.println("仰泳");
}
}
public class Test {
public static void main(String[] args) {
// 普通方式传入对象
// 创建实现类对象
Student s = new Student();
goSwimming(s);
// 匿名内部类使用场景:作为方法参数传递
Swim s3 = new Swim() {
@Override
public void swimming() {
System.out.println("顾泳");
}
};
// 传入匿名内部类
goSwimming(s3);
// 完美方案: 一步到位
goSwimming(new Swim() {
public void swimming() {
System.out.println("小学生, 蛙泳");
}
});
goSwimming(new Swim() {
public void swimming() {
System.out.println("中学生, 潜泳");
}
});
}
// 定义一个方法,模拟请一些人去游泳
public static void goSwimming(Swim s) {
s.swimming();
}
}
标签: #java私有类怎么创建