------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Object类
概述:
Object是所有对象的直接后者间接父类,传说中的上帝。该类中定义的肯定是所有对象都具备的功能。
例:
class Demo //extends Object { private int num; Demo(int num) { this.num = num; } /* public boolean compare(Demo d) { return this.num == d.num; }*/ public boolean equals(Object obj) //Object obj = new Demo(); { if(!(obj instanceof Demo)) return false; Demo d = (Demo)obj; return this.num == d.num; } } class Person { } class ObjectDemo { public static void main(String[] args) { Demo d1 = new Demo(4); Demo d2 = new Demo(5); Person p = new Person(); System.out.println(d1.equals(p)); } }
Object类toString()
Demo d1 = new Demo(4); //Demo d2 = new Demo(5); System.out.println(Integer.toHexString(d1.hashCode())); System.out.println(d1.toString());运行结果:
内部类
例:
内部类的访问规则:
1、内部类可以直接访问外部类中的成员,包括私有。
class Outer { private int x= 3; static class Inner //内部类 { void function() { System.out.println("inner:"+x); } } } class InnerClassDemo { public static void main(String[] args) { //Outer out = new Outer(); //out.method(); //直接访问内部类中的成员。 // Outer.Inner in = new Outer().new Inner(); //in.function(); } }
静态内部类
class Outer { private static int x= 3; static class Inner //静态内部类 { static void function() { System.out.println("inner:"+x); } } class Inner2 { void show() { System.out.println("inner2 show"); } } public static void method() { //Inner.function(); new Inner2().show(); } } class InnerClassDemo { public static void main(String[] args) { Outer.method(); //Outer.Inner.function(); //new Outer.Inner().function(); //Outer out = new Outer(); //out.method(); //直接访问内部类中的成员。 // Outer.Inner in = new Outer().new Inner(); //in.function(); } }
内部类定义原则
class Outer { private static int x= 3; static class Inner //静态内部类 { static void function() { System.out.println("inner:"+x); } } class Inner2 { void show() { System.out.println("inner2 show"); } } public static void method() { //Inner.function(); new Inner2().show(); } } class InnerClassDemo { public static void main(String[] args) { Outer.method(); //Outer.Inner.function(); //new Outer.Inner().function(); //Outer out = new Outer(); //out.method(); //直接访问内部类中的成员。 // Outer.Inner in = new Outer().new Inner(); //in.function(); } }
class Outer { int x = 3; void method(final int a) { final int y = 4; class Inner { void function() { System.out.println(a); } } new Inner().function(); } } class InnerClassDemo3 { public static void main(String[] args) { Outer out = new Outer(); out.method(7); out.method(8); } }
例:
abstract class AbsDemo { abstract void show(); } class Outer { int x= 3; /* class Inner extends AbsDemo { void show() { System.out.println("show:"+x); } } */ public void function() { //new Inner().show(); //Inner in = new Inner(); //in.show(); //in.abc(); AbsDemo d = new AbsDemo() { int num = 9; void show() { System.out.println("num="+num); } void adc() { System.out.println("haha"); } }; d.show(); //d.abc(); 编译失败 } } class InnerClassDemo4 { public static void main(String[] args) { new Outer().function(); } }
练习:
interface Inter { void method(); } class Test { //补足代码。通过匿名内部类。 static Inter function() { return new Inter() { public void method() { System.out.println("method"); } }; } } class InnerClassTest { public static void main(String[] args) { //Test.function():Test类中有一个静态的方法function。 //.method():function这个方法运算后的结果是一个对象。 //而且是一个Inter类型的对象。 Test.function().method(); Inter in = Test.function(); in.method(); show(new Inter() { public void method() { System.out.println("method show run"); } }); } public static void show(Inter in) { in.method(); } }
总结:内部类就是用new的方式创建一个子类并进行操作。