Lesson_8 上课笔记 继承

2013 - 01 - 18 Lesson_8 继承

  1 /***********************************************************
  2 *                       Lesson_8_1
  3 *
  4 *                    继承(inheritance)
  5 *                       13-01-18
  6 *                   note by CocoonFan
  7 ************************************************************
  8 ************************************************************
  9 * 一.内存
 10 *   1.代码存放在代码段;
 11 *     局部变量和基本数据类型存放于栈;
 12 *     引用类型存放于堆中;
 13 *     静态变量(static)、字符串存放于数据段。
 14 * 二.继承 -- 代码的重用
 15 *   1.利用现有的类(基类或父类)创建新的类(派生类或父类)
 16 *   2.派生类:基类的方法 + 附加的方法
 17 *   3.层次越高越抽象
 18 *   4.[访问修饰符] class 派生类名 extends 基类名 {}
 19 *   5.Java只支持单继承
 20 *   6.父类中的构造方法不能被子类继承
 21 *   7.子类的构造方法只需要考虑自己的成员变量,不必考虑父类的成员变量
 22 *   8.实例化子类对象的时候,先执行父类的构造方法再执行子类的构造方法
 23 *     有多级构造方法的时候类似.此时会创建匿名的父类对象,之后JVM会
 24 *     将其回收.
 25 *   9.如果父类的构造方法失败,子类的构造方法也不能成功
 26 *  10.所有对象有一个顶级父类 Object
 27 * 二.super关键字
 28 *     1.必须是子类构造方法的第一条语句
 29 *     2.用于显式地指明调用父类的构造方法super([参数1,...]);
 30 *     3.不写会默认调用父类无参的构造方法
 31 *     4.
 32 *
 33 ************************************************************/
 34 
 35 public class Lesson_8{
 36     public static void main(String[] args) {
 37         
 38         Animal animal = new Animal();
 39         animal.sleep(0);
 40         
 41         Cat cat = new Cat();
 42         cat.sleep(2);
 43         
 44         cat.setName("波斯猫");//父类(animal)的名字name并不会改变
 45         System.out.println(cat.getName());    //波斯猫
 46         System.out.println(animal.getName()); // null
 47     }
 48 }
 49 
 50 class Animal{//父类
 51     
 52     private String name;
 53     private int age;
 54     
 55     //构造方法
 56     public Animal(){
 57         System.out.println("动物的构造方法");
 58     }
 59     
 60     public Animal(String name, int age){
 61         this.name = name;
 62         this.age = age;
 63         System.out.println("动物的带2个参数的构造方法");
 64     }
 65     
 66     public String getName() {
 67         return name;
 68     }
 69 
 70 
 71     public void setName(String name) {
 72         this.name = name;
 73     }
 74 
 75 
 76     public int getAge() {
 77         return age;
 78     }
 79 
 80 
 81     public void setAge(int age) {
 82         this.age = age;
 83     }
 84 
 85 
 86     public void sleep(int hour){
 87         System.out.println("动物能睡觉,已经睡了" + hour + "个小时了");
 88     }
 89     
 90 }
 91 
 92 class Cat extends Animal{
 93     private String color;//属于Cat
 94     
 95     public Cat(){
 96         super();
 97     }
 98     
 99     public Cat(String color){
100         super("", 0);//会调用父类带有两个参数的构造方法
101         this.color = color;
102         System.out.println("猫的构造方法");//会先调用父类的构造方法
103     }
104 }
原文地址:https://www.cnblogs.com/CocoonFan/p/2867028.html