黑马程序员---Java基础学习笔记(面向对象篇)

来源:互联网 发布:怎么购买淘宝小号 编辑:程序博客网 时间:2024/06/07 06:31
------------Android培训、Java培训、期待与您交流----------

在面向对象的这个环节里,我就不罗列概念什么的了,着重讲两个我觉得应该重视的问题:内部类和多态。

1.内部类

定义:把一个类定义在某个类中的,这个类就被称为内部类,内置类,嵌套类。
内部类访问规则:
1.内部类可以直接访问外部类中的成员,包括私有成员。
之所以可以直接访问外部类中的成员,因为内部类中持有一个外部类的引用。外部类.this
2.外部类要访问内部类,必须建立内部类对象。
3.当内部类在成员位置上,就可以被成员修饰符所修饰。
private:内部类在外部类中进行封装。
static: 内部类就具备static的特性。修饰后只能直接访问外部类中的static成员,出现了访问局限。
在外部其他类中,如何直接访问静态内部类中的非静态成员?new Outer.Inner().function();
在外部其他类中,如何直接访问静态内部类中的静态成员?Outer.Inner.function();
P.S.01当内部类定义了静态成员,该类必须是静态的。
P.S.02当外部类中的静态方法访问内部类时候,内部类也必须是静态的。
代码演示:
class Outer{static class Inner01{void show(){System.out.println("inner01 show");}}public static void util(){new Inner01().show();}private static int x = 3;//Quiz03static class Inner{static int x = 5;static void function(){System.out.println("inner:"+x);}}/*Quiz02 static class Inner{int x = 5;void function(){System.out.println("inner:"+x);}}*//*Quiz01class Inner{int x = 4;void function(){int x = 6;System.out.println("inner:" + x);//6System.out.println("inner:" + this.x);//4System.out.println("inner:" + Outer.this.x);//3}}*//*Quiz00private class Inner//内部类可以定义为私有成员{void function(){System.out.println("inner:" + x);}}*/void method(){Inner in = new Inner();in.function();}}public class InnerClass {public static void main(String[] args) {Outer.util();//当private class Inner时//Outer out = new Outer();  //out.method();  //直接访问内部类中的成员,必须无private前缀//Outer.Inner in = new Outer().new Inner();//in.function();//new Outer.Inner().function();Quiz02//Outer.Inner.function();//Quiz03}}

2.匿名内部类

1.匿名内部类其实就是内部类的简写格式。
2.定义匿名内部类的前提:内部类必须是继承一个外部类或者实现接口。
3.格式:new 父类名称or接口(){定义子类的内容}
4.匿名内部类其实是一个匿名子类对象。且这个对象内容较多。
5.匿名内部类中定义的方法不要超过3个。保证内部类的简洁高效性。

代码演示:
abstract class AbsDemo{abstract void show();abstract void run();//abstract void fuc();}class Outerss{int x = 3;/*class Inner01 extends AbsDemo{void show(){System.out.println("show:"+x);}}*/public void function(){//new Inner01().show();//绿色部分的简化写法,整体是个对象,后边可以调用方法。new AbsDemo(){int x = 4;void show(){System.out.println("show:"+this.x);}void abc(){System.out.println("show sth...");}@Overridevoid run() {// TODO Auto-generated method stub}}.show();//若想同时调用两个办法怎么办?AbsDemo d = new AbsDemo(){void show(){System.out.println("show:"+x);}void abc(){System.out.println("show sth...");}@Overridevoid run() {// TODO Auto-generated method stub}};d.show();//d.abc();编译失败,因为子类依靠父类起的名字,子类只能使用父类中的方法。    //父类中没有定义此方法,子类无法调用。}}public class AnonymousIC {public static void main(String[] args) {new Outerss().function();}}

3.多态

定义:同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)

多态前提

       A:存在着继承或者实现关系

       B:有方法的重写

       C:父类(接口)引用指向子类(实现)对象

多态的好处和弊端:

       好处:多态的存在提高了程序的扩展性和后期可维护性

       弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。不能预先使用子类中定义的特有功能。

多态中对象调用成员的特点

       Fu f = new Zi();

       A:成员变量:编译看左边,运行看左边

       B:成员方法:编译看左边,运行看右边

       C:静态方法:编译看左边,运行看左边

 多态的思想

       指挥同一批对象做事情。举例:带兵打仗,下课等。

多态中对象调用成员的特点代码演示:
class Father{//Quiz02 int num = 5;public void method1(){System.out.println("F1");}public void method2(){System.out.println("F2");}//Quiz03static void method4(){System.out.println("F4");}}class Kids extends Father{//Quiz02 int num = 8;public void method1(){System.out.println("K1");}public void method3(){System.out.println("K3");}//Quiz03static void method4(){System.out.println("K4");}}public class Polymorphic_2 {public static void main(String[] args){Kids k = new Kids();k.method1();//子类方法覆盖k.method2();//子类没有,调用父类方法k.method3();//子类特有//Quiz03 k.method4();//Quiz02 System.out.println(k.num);Father f = new Kids();//f此时是指向子类对象的f.method1();f.method2();//Quiz02 System.out.println(f.num);//Quiz03 f.method4();}}//Quiz 01//多态中(非静态)成员函数的特点//在编译期间,参阅引用变量(f)所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。//在运行期间,参阅对象(Kids)所属的类中是否有调用的方法。//总结:成员函数在多态调用时,编译看引用变量,运行看对象。//Quiz 02//多态中成员变量的特点,静态成员变量也一样//无论编译还是运行环节,都参考左边(引用变量所属的类)//Quiz 03 静态成员函数//无论编译还是运行环节,都参考左边
------------Android培训、Java培训、期待与您交流----------

原创粉丝点击