黑马程序员  第八天笔记 

            <a href="http://www.itheima.com" target="blank">java培训</a>

1.继承概述

前提:多各类中,属性和方法一样

      造成重复太多,代码冗余

      将重复的东西取出来,形成看一个类。这个类叫做其他各个类的父类,其他各个类叫做这个类的子类。

  代码演示:

         

          

演示结果:

       

2.继承好处:

提高代码的复用性,代码量减少,提高代码的可维护性

继承的出现,让类与类之间产生关系,正式有个这个关系,为多态的出现的做了准备

3.JAVA中继承的特点

JAVA支持单继承,不支持多继承

一个类,只能继承一个类,不能同时继承多个类。但是,支持多层继承,或者叫做多重继承

class A{}

 class B extends A{}

 class C extends B{}

  A类是B的父类,B是C的父类,C是A的孙子类

  C可以直接使用A和B的成员,不包括私有

 B可以直接使用A的成员,不包括私有

A可以直接使用自己的成员,包括私有

4.什么时候使用继承

  到底什么时候需要使用继承

  具体情况具体分析:当你分析程序的时候,先要分析程序中确实存在具体事物, 找谁是谁的一种,如果一个事物是另一事物中的一种,可以继承

   如果一个事物的具备了另一个事物的一部分,而另一部分不具备的时候,继承无效,不能继承

5.继承后,子类父类之间成员变量的特点

     A.如果子类有,使用子类的成员变量,否则使用父类的

     B.父类,子类,子类方法,出现了同名变量

     B.1如果子类方法有变量,就近访问

     B. 2子类方法中,自己访问成员变量,用this

     B.3子类使用父类的成员变量,使用super关键字

6.super关键字

     This代表本类对象的引用

     Super代表父类存储空间的标识(心里理解为父亲对象引用)

代码演示:

          

 演示结果:

       

 

子类父类内存图

注意:父类先进内存,子类再进内存,会在子类的空间中做上一个super的标识,标明父类的内存位置

7.继承以后,子类父类构造方法的特点

  A.在建立子类对象的时候,无论如何必须运行父类构造方法

A.1在子类构造方法的第一行,有一个隐士代码: super()作用调用父类空参数构造方法

A.2如果子类不写构造方法,编译的时候加上构造方法

         编译时期加入构造方法 

              权限  构造方法名(){

                 super(); }

A.3 JAVA中所有类的所有构造方法第一行默认是super()

   构造方法,重载也算 

 B.如果父类中没有空参数构造方法,父类中自己手写了构造方法

B.1 子类的所有构造方法,必须手写super,否则便编译失败

B.2如果父类中有多个构造方法,子类可以任意选择一个构造方法调用

 

  C. 子类构造方法中,this和super语句的特性

  C.1 子类构造方法中,this还是super选择一个

 C.2 子类构造方法写了this语句,默认的super语句就没有了

 C.3 子类构造方法,写this语句,会通过别的构造方法,间接访问到父类构造方法

 

 总结特点:

      记住所有类构造方法第一行都是super()!!!

       程序中,必须保证子类中所有的构造方法无论直接还是间接,都必须访问过父类的构造方法。

      子类父类构造方法的题目:看子类中所有构造方法是不是都访问过父类构造方法,

       如果没有,直接编译失败

代码演示:

        

演示结果:

      

8. 子类父类中成员方法特点(非常重要,后期,经常出现了)

    继承中,子类出现了和父类一模一样的方法,这样的现象,称为 子类重写父类的方法,前提是权限必须大于或者等于父类方法权限 (override) 现象还叫做,子类覆盖父类方

    法,重写,复写 。

   正在尝试分配更低的访问权限; 以前为public : 子类方法权限小于了父类方法权限

   返回类型int与void不兼容 : 重写的时候,子类方法返回值和父类方法返回值不同

 静态方法:

    静态覆盖静态,非静态覆盖非静态

    静态方法,属于自己的类,不属于对象,因此静态没有覆盖的说法

9.重写方法

  extends 继承,实际英文 扩展,延伸

  class Zi extends Fu{} 

  子类扩展的了父类的功能

代码演示:

     

演示结果:

    

 

10. 学生和老师继承练习

  学生姓名,年龄

  老师姓名,年龄

  学生功能,学习功能

  老师功能,上课功能

   要求:共性抽取父类,父类成员私有,提高get set

  在学生和老师的功能中,打印出自己的姓名和年龄

代码结果:

           

       

结果演示:

   

 

  

 

11.Final关键字

   final是最终的意思,修饰符,修饰类,方法,成员变量,局部变量

  final修饰类--最终类,不能有子类,不能被继承

  final修饰方法-- 最终方法,这个方法不能被子类重写

  子类继承后,可以调用,但是不能重写

 

  final修饰的成员变量--最终变量,只能赋值一次,终身不变,就是常量

  final修饰成员变量,固定的数值,不是内存默认值

  final修饰成员变量,可以在构造方法中赋值,但是不能在普通的方法中赋值

  原因:构造方法是建立对象的过程,普通方法是对象已经建立完成了, 日后在类中,如果定义静态的常量的使用

    标准格式  public static final int A = 10;

                 public static final double PI = 3.14159265358979323846;

代码演示:

      

演示结果:

     

posted on 2015-03-23 23:17  星之钥匙  阅读(98)  评论(0编辑  收藏  举报