学习笔记5—Java基础4_面向对象下a

来源:互联网 发布:理财分红系统源码 编辑:程序博客网 时间:2024/05/21 04:41

类的继承:
      通过继承可以简化类的定义 。
      Java只支持单继承,不允许多重继承。 但可以有多层继承,即一个类可以继承某一个类的子类,如类B

继承了类A,类C又可以继承类B,那么类C也间接继承了类A。
      子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句

super(参数列表) 调用父类的构造方法。如果子类的构造方法中没有显式地调用父类构造方法,也没有使用

this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法。

  
子类对象的实例化过程:
      分配成员变量的存储空间并进行默认的初始化。绑定构造方法参数,就是new Person(实际参数列表)

中所传递进的参数赋值给构造方法中的形式参数变量。如有this()调用,则调用相应的重载构造方法,被调

用的重载构造方法的执行流程结束后,回到当前构造方法,执行当前构造方法的方法体中的程序代码
      显式或隐式追溯调用父类的构造方法(一直到Object类为止),父类的构造方法如上,执行流程结束后,

回到当前构造方法,执行当前构造方法的方法体中的程序代码 。

 

覆盖父类的方法:
      覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
      如果在子类中想调用父类中的那个被覆盖的方法,我们可以用super.方法的格式 。
      覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限 。

 

final关键字:
      final标记的类不能被继承。
      final标记的方法不能被子类重写。
      final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
      方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于是一个

常量,它的生命周期超出方法运行的生命周期,将一个形参定义成final也是可以的,这就限定了我们在方

法中修改形式参数的值。
      public static final共同标记常量时,这个常量就成了全局的常量。

 

抽象类:
      一些不含方法体的方法,它的方法体的实现交给该类的子类实现,即抽象方法。
      包含抽象方法的类就叫抽象类。
      抽象类必须用abstract关键字来修饰;抽象方法也必须用abstract来修饰。
      抽象类不能被实例化,也就是不能用new关键字去产生对象。
      抽象方法只需声明,而不需实现。
      含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则

这个子类还是个抽象类。

 

接口(interface):
      如果一个抽象类中的所有方法都是抽象的,即接口。
      接口是抽象方法和常量值的定义的集合,是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义

,而没有变量和方法的实现。
      接口中的成员都是public访问类型的。接口里的变量默认是用public static final标识的 。
      可以定义一个新的接口用extends关键字去继承一个已有的接口
      可以定义一个类用implements关键字去实现一个接口中的所有方法,我们还可以去定义一个抽象类用

implements关键字去实现一个接口中定义的部分方法。
      一个类可以继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implemnets关键字之

前 。

 

对象的类型转换:
      子类对象可以自动转换成父类
      父类转换成子类必须使用强制转换。
      instanceof 操作符可以用它来判断一个实例对象是否属于一个类。
   
面向对象的多态性:
      应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可。
      派生类的功能可以被基类的引用变量引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。

 

匿名内部类:
      该类只被使用一次时经常使用,连名字都可以不用起。
abstract class A
{
       abstract public void fun1();
}
class Outer
{
       public static void main(String [] args)
      {
             new Outer().callInner(new A()
             {
                      public void fun1()
                      {
                              System.out.println("implement for fun1");
                       }
             });
      }
      public void callInner(A a)
     {
             a.fun1();
     }

}


   
   
   

原创粉丝点击