Java面向对象及关键词(下)

this

---------------------------------------

*两种用法:

      1) 引用当前对象:

             *)this 保存当前对象的内存地址(当前对象:正在调用的对象)

             *)用this调用当前对象 的成员: this.name    this.toString()

 

       2)构造方法之间调用:

        *)目的:减少代码的重复

        *)一般从参数少的方法调用参数多的方法,在参数多的方法中编码,集中处理参数的数据

       *)this(....)必须是构造方法首行代码

 

*方法重载:方法名相同,方法参数不同

 

继承

-----------------------------------------------

*作用:代码重用、复用

*主要继承的是可见成员,不继承:构造方法  、不可见成员、静态成员;

*单继承:1)一个子类只能有一个父类;

                  2)一个父类可以有多个子类;

*创建子类对象:1)先创建父类对象,执行父类构造方法

                              2)再创建子类对象,执行子类构造方法

                                         *)两个对象绑定在一起,整体作为一个子类对象

                                        *)调用成员时先从子类中调用,子类中没有再到父类中调用

*创建子类对象执行父类构造方法:

                              1)默认执行父类无参构造方法    eg:super()                             

                              2)手动调用父类有参构造方法   eg:super(参数)

 

方法重写 OverRide

-------------------------------------------------

需要方法重写的情况:

                           1)从父类继承的方法,不满足子类的需要,可以在子类中重写这个方法

                           2)在重写的方法中,可以调用父类同一个方法的代码        eg:super.toString()

 

Super

--------------------------------------------------

super的两种用法:

                          *) 重写方法时,调用父类中同一个方法    super.toString();

                         *)子类构造方法中,手动调用父类构造方法   super(参数),但必须是首行代码

 

多态

-----------------------------------------------------

*作用:保持一致的类型

*类型转换

               1)向上转型:子类对象转型成父类对象,但向上转型后只能调用父类定义的通用成员

                2)向下转型:已经转型成父类的子类对象在转成子类

 

instanceof

------------------------------------------------------

作用:运行期类型识别

*对真实类型及父类型判断,都得到true

  eg:Shape s=new Line();

      s  instanceof  Line    ===>true

       s instanceof  Shape   ===>true

 

 

抽象类

----------------------------------------------------

*作用:*)为子类提供通用代码

              *)为子类提供通用方法的定义

               *)抽象类相当于半成品类,不能创建对象,主要由子类来实现抽象类中未完成的方法,包含抽象方法的类一定是抽象类,抽象类中不一定包含抽象方法

 

 

final

------------------------------------------------------·

*修饰变量 、方法  、类

*final变量

   *)变量的值不可变,称为常量

   *)基本类型             值 本身不可变

    *)引用类型  引用的内存地址不可变

             eg:  final  int a=10;

                         a=100;  错    a的值不可变

                --------------------------------------------

                   final  Point a=new Point(2,3)

                       a.x=20;

                       a=new Point(5,7)

                       a=nul;

    *)final方法   1)方法不能再子类中重写

                          2)不能被继承  eg System.String

 

 

Static

----------------------------------------------

*静态

*静态成员属于类,不属于实例

*静态成员可以称为:类变量  类方法

*非静态成员可以称为:实例变量   实例方法

*一般用类名调用静态成员:eg:   A.age

                                                   Integer.MAX_VALUE

                                                   Math.radom

*静态方法中不能调用非静态成员

*什么时候使用静态

           *)使用原则:*)能不用就不用

                                 *)静态是非面向对象的语法

          *)使用场景:*)共享的数据   *)共享的工具方法

                                eg:Math.random()

 

静态初始化块

     class A{

             static{

                     在类加载时只执行一次

             }

     }

 

常量

    * static final

           static final int MAX_VALUE = 100;

对象创建过程:

     class A{

                int V1 = 1;

                static int V2 = 2;

                static{

                       ......

                        }

 

                public A(){

                     ..............

                 }

     }

 

class B extends A{

          int V3 = 3;

         static int V4 = 4;

         static{

               ......

        }

       public B(){

       ......

      }

}

 

new B();

 

*)第一次用到A B两个类

      1)加载父类,为它的静态变量分配内存;

      2)加载子类,为它的静态变量分配内存;

      3)执行父类的静态变量的赋值运算,并执行静态初始化块

      4)执行子类静态变量的赋值运算符,并执行静态初始化块

*)每次创建对象时

      5)为父类对象分配内存,为它的非静态变量分配内存

     6)为子类对象分配内存,为它的非静态变量分配内存

     7)执行父类非静态变量的赋值运算

     8)执行父类的构造方法

     9)执行子类的非静态变量的赋值运算

    10)执行子类的构造方法  

 

访问控制符

-----------------------------------------

     *控制一个类或类中的成员的访问范围

                           类      包      子类    任意 

   public            OK     OK     OK      OK

   protected      OK     OK     OK

   [default]          OK     OK

   private          OK

 

   选择的原则:

        *)尽量选择小的范围

       *)public 是与其他开发者的契约,最好保持稳定的对外输出值或返回值。

 

接口

---------------------------------------

  *作用:  结构设计工具,用来解耦合

  *接口是极端的抽象类

  *用interface 代替了class,用inplements代替extends

  *接口中只能定义: *)公开的抽象方法   *)公开的常量   *)公开的内部类、内部接口

  *一个类可以实现多个父接口 

      class A inplements B,C,D{  ......}

      class A extents B implements C,D{......}

      

*接口之间继承

     interface A  extends B,C,D{......}

 

内部类

----------------------------------------------------

*定义在类的内部、方法内部或局部代码块内的类

*可分为:非静态内部类、静态内部类、局部内部类和匿名内部类

 

非静态内部类:

   *)非静态内部实例依赖外部实例存在

   *)非静态内部类中不能定义静态成员

     

    class A{

         class Inner{

           ...... 

       }

    ........

   }

 

A a = new A();

Inner inner = a.(new Inner());

 

静态内部类

     class A{

           static class Inner{

              ........... 

          }

     }

A.Inner innner = new  A.Inner();

 

局部内部类

   class A{

       Weapon  fun {

               class Inner implements Weapon{

                    public  void kill(){

                       .....

                     }

             }

                Inner inner = new Inner();

               return inner;

       }

   }

   A a = new A();

 Weapon w = a.fun();

 w.kill();

 

匿名内部类

   Weapon w = new Weapon(){

      .......

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值