* 编写一个内部类,外部类为药品类,内部类为药架类,包括一个放置药品的方法,要求: * 1.外部其他类不能直接访问内部类 * 2.但外部其他类可以访问内部类的放置药品方法
2017-11-09 13:18
861 查看
—-classOne
package firstExam.third;
public interface MedicineSelfInterface {
}
—-classTwo
package firstExam.third;
public class Medicine {
}
—-classThree
package firstExam.third;
/**
* 编写一个内部类,外部类为药品类,内部类为药架类,包括一个放置药品的方法,要求:
* 1.外部其他类不能直接访问内部类
* 2.但外部其他类可以访问内部类的放置药品方法
*/
/**
* Java内部类的概念及四种分类
* 概念:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
* 分类①:成员内部类
* 成员内部类是最普通的内部类,它的定义位于另一个类的内部;成员内部类类似于此外部类的方法,可以无条件的访问
* 外部类的所有成员属性和成员方法。但是外部类如果要访问成员内部类的成员,必须先创建一个成员内部类的对象。成员内部类是
* 依附于外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。
* 内部类可以拥有各种访问修饰权限,如果内部类Inner用private修饰,则只能在外部类的内部访问,如果用public
* 修饰,则任何地方都能访问,但是外部类只能被public和包访问权限(默认)修饰,由于内部类看起来像是外部类的一个成员,
* 所以可以像类的成员一样拥有多种权限修饰。
* 分类②:局部内部类
* 定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的方法权限仅限于方法内或者该作用域内。
* 局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的,
* 局部变量只能被final修饰或者是默认修饰。
* 分类③静态内部类
* 静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,
* 这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,
* 分类④匿名内部类
*/
public class Test {
}
package firstExam.third;
public interface MedicineSelfInterface {
public void putMedicine();
}
—-classTwo
package firstExam.third;
public class Medicine {
public MedicineSelf getInnerInstancce(){ return new MedicineSelf(); } private class MedicineSelf implements MedicineSelfInterface{ @Override public void putMedicine() { System.out.println("药架用于放置药品。"); } }
}
—-classThree
package firstExam.third;
/**
* 编写一个内部类,外部类为药品类,内部类为药架类,包括一个放置药品的方法,要求:
* 1.外部其他类不能直接访问内部类
* 2.但外部其他类可以访问内部类的放置药品方法
*/
/**
* Java内部类的概念及四种分类
* 概念:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
* 分类①:成员内部类
* 成员内部类是最普通的内部类,它的定义位于另一个类的内部;成员内部类类似于此外部类的方法,可以无条件的访问
* 外部类的所有成员属性和成员方法。但是外部类如果要访问成员内部类的成员,必须先创建一个成员内部类的对象。成员内部类是
* 依附于外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。
* 内部类可以拥有各种访问修饰权限,如果内部类Inner用private修饰,则只能在外部类的内部访问,如果用public
* 修饰,则任何地方都能访问,但是外部类只能被public和包访问权限(默认)修饰,由于内部类看起来像是外部类的一个成员,
* 所以可以像类的成员一样拥有多种权限修饰。
* 分类②:局部内部类
* 定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的方法权限仅限于方法内或者该作用域内。
* 局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的,
* 局部变量只能被final修饰或者是默认修饰。
* 分类③静态内部类
* 静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,
* 这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,
* 分类④匿名内部类
*/
public class Test {
public static void main(String[] args) { Medicine medicine=new Medicine(); /*多态,利用接口的引用来接收实现类的对象,medicine.getInnerInstancce();方法 * 返回一个内部类MedicineSelf的对象实例;此处如果不使用接口,那么MedicineSelf为 * private的内部类,不可以被其他类所方法,就会出现错误。 */ medicine.getInnerInstancce(); MedicineSelfInterface msi=medicine.getInnerInstancce(); /*msi.putMedicine();是接口MedicineSelfInterface的抽象方法,编译期间 *匹配MedicineSelfInterface接口的抽象方法,运行期间JVM根据 *medicine.getInnerInstancce();的实际类型, *动态绑定msi.putMedicine();方法的实现 */ msi.putMedicine(); }
}
相关文章推荐
- 编写一个Cirle类,包括构造方法,求圆的面积和周长,如果圆的半径小于0则抛出异常,让用户必须处理,半径必须大于0才可以
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
- 外部类可以自由访问内部类的private方法
- Java匿名内部类可以访问外部类的成员;若访问所在方法的成员,那个成员必须具有final属性
- JAVA匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
- 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
- WindowsXP安装iis,本机可以访问,其他机器不能访问的解决方法
- Java类的嵌套:外部类的方法不能访问内部类的变量
- unity 给大家分享一个可以直接将unity中的物体导出成fbx存在项目中的方法(实测pc可用,移动端不可以~~~其他待测~~)
- 今天做一个winform,想直接把窗体改成输出类库,其他地方直接调结果总提示不能注册组件,回来调度,可以,总结,windows还是直接用新建的类型项目,改容易出错
- 编写类A,该类创建的对象包含一个方法f输出英文字母表,再编写一个A类的子类B,要求必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字线表,而且调用子类新增的方法g输出希腊字
- 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)
- 10_9_1编写代码,定义一个基类MyClass,其中包括虚礼方法GetString(),这个方法返回存储在受保护字段myString中的字符串,该字段可以通过只写公共属性ContainedStrin
- 为什么一个对象调用的类方法可以访问该类其他对象的私有成员
- 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)
- 关于JSP不能通过浏览器直接访问,要通过servlet跳转,但一个jsp文件里面用<iframe>标签包含了另一个jsp的访问问题
- 10_9_4编写一个类MyCopyableClass,该类可以使用方法GetCopy()返回它本身的一个副本.这个方法应使派生与System.Object的MemberwiseClose()方法.该类
- 请编写一个关于星期几的枚举WeekDay,要求: 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type), 方法包括显示手机信息,并编写测试类进行对象的创建
- 本类的方法可以访问本类的任何一个对象的私有域、