Java 对象基础,内部类的使用
Java局部内部类的使用,将类进行方法内部化,然外面的类无法访问的,只用通过,当前这个school类才能访问。
1.package com.javabase.obj.jubuleibulei;
public class Deamo1`在这里插入代码片` {
public static void main(String[] args) {
School sc=new School();
// Teacher t=new Tom();
//由学校来调用教师
Teacher teacher=sc.getTeacher(60);
teacher.teach();
//其他的机构可以直接和tom谈了
// t.teach();
//所以我们需要将教师局部化,只能通过学校去请老师
}
}
//定义一个教师接口
interface Teacher{
public void teach();
}
/*
* 方法一:教师可以随便调用
//定义教师类
class Tom implements Teacher {
@Override
public void teach() {
System.out.println("tom教课。。。");
}
}
class Jeck implements Teacher{
@Override
public void teach() {
System.out.println("jack教课。。。");
}
}*/
//定义一个学校类,用于调用教师
class School{
//定义教师类
// 方法二:将教师封装起来,局部内部类的用法,只能通过学校调用教师
class Tom implements Teacher {
@Override
public void teach() {
System.out.println("tom教课。。。");
}
}
class Jeck implements Teacher{
@Override
public void teach() {
System.out.println("jack教课。。。");
}
}
//获取教师,如果学生数量小于40个则派请tom老师,否则Jack去
public Teacher getTeacher(int num) {
if (num<40) {
return new Tom();
}
return new Jeck();
}
}
//匿名内部类的用法
/**
* 匿名内部类
* @author Administrator
*
*/
class School{
//获取教师,如果学生数量小于40个则派请tom老师,否则Jack去
public Teacher getTeacher(int num) {
if (num<40) {
//匿名内部类,new是接口的引用
return new Teacher() {
@Override
public void teach() {
System.out.println("tom教课。。。。");
}
};
}
return new Teacher() {
@Override
public void teach() {
System.out.println("jack教课。。。");
}
};
}
}
//
/**
* 匿名内部类的第二种写法,继承类,匿名类必须有一个父类
* @author Administrator
*
*/
class Persen{
public void play() {
System.out.println("吃完后打豆豆。。。。。。");
}
}
class Admin{
public Persen getplay(int num) {
//匿名内部类,默认调用父类Persen的方法
return new Persen() {
// public void play() {
// System.out.println("吃完后打豆豆。。。。。。");
// }
};
}
}
![将类进行局部内部类封装后,Teacher无法直接调用](https://img-blog.csdnimg.cn/20200527223059363.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc5Nzk3Ng==,size_16,color_FFFFFF,t_70#pic_center)
![打印出的结果](https://img-blog.csdnimg.cn/20200527223333994.png#pic_center)