夜光序言:
这无情的世界,因为有热情的蠢货,才有些浪漫~~
正文:
第一个类:
package com.Genius.ninth;
public class InnerTest {
public static void main(String[] args) {
Outer out = new Outer();
out.useIner();
}
}
第二个类:
package com.Genius.ninth;
/*夜光:内部类
* 定义于类内部的类
* 打个比方吧~~人比作类,人的身体中又有许多器官
* 我们再把这些器官比作类
* 看下,下面这个程序嗯~
* */
public class Outer {
String out_string = "String in Outer";
//设置外部类的变量
void useIner(){
Iner in = new Iner();
in.print();
}
//创建内部类
class Iner{ //夜光:在内部类中定义的方法~~
void print(){
System.out.println();
//在内部类中访问其宿主类的变量
System.out.println("use\'"+out_string+"\'");
}
}
}
package com.Genius.ninth;
/*夜光:我们写一个匿名内部类
* 就是指没有名称的内部类
*
*
* */
public class AnonymousInnerTest {
public static void main(String[] args) {
DustMan dm = new DustMan();
dm.cleanWithBroom();
dm.cleanWithDustCollector();
}
}
class DustMan{
public void cleanWithBroom(){
Utility util = new Utility(){
public void clean(){
System.out.println("夜光在炒菜~~");
}
};
util.clean();
}
public void cleanWithDustCollector(){
ElectronicUtil util = new ElectronicUtil(){
public void clean(){
System.out.println("夜光在烧大骨头~~");
}
};
util.clean();
}
}
interface Utility{
public void clean();
}
class ElectronicUtil{
public void clean(){
System.out.println("夜光加油学习烧菜~~");
}
}
package com.Genius.ninth;
/*夜光:我们写一个静态内部类~~
*
* 一般情况下,内部类会隐性持有一个指向外部类的引用
* 由此可以直接去访问外部类的一些成员
* 如果不需要让内部类持有这个特性的话
* 就需要将内部类设置为静态属性~
*
* */
public class StaticInnerClass {
public static void main(String[] args){
Painter p = new Painter();
p.setName("夜光");
p.print();
}
}
class Painter{
private Pen pen = new Pen();
private String name = "";
static class Pen{
private String lead = "数位笔";
public void print(){
System.out.println("夜光:使用数位笔作图~~");
}
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Pen getPen(){
return pen;
}
public void setPen(Pen pen){
this.pen = pen;
}
public void print(){
pen.print();
}
}
package com.Genius.ninth;
/*夜光:下面我们使用一个引用外部类对象的实例*/
public class OutObjectTest {
public static void main(String[] args) {
Genius genius = new Genius();
Genius.Work work = genius.getWork();
work.burn();
}
}
class Genius{
private int life = 23;
private String sex = "男";
private Work software = null;
class Work{
private String name = "软件工程";
public String toString(){
return name;
}
public void burn(){
System.out.println(Genius.this+"一直在敲代码哦~~"+this);
}
}
public String toString(){
return "夜光";
}
public Work getSoftware(){
return software;
}
public void setSoftware(Work software){
this.software = software;
}
public String getSex(){
return sex;
}
public void setSex(String sex){
this.sex = sex;
}
public int getLife(){
return life;
}
public void setLife(int life){
this.life = life;
}
public Work getWork(){
if(software == null){
software = new Work();
}
return software;
}
}