1 package com.bytezero.inherit; 2 3 /* 4 * 面向对象的特征二:继承性 5 * 6 * 一.继承性的好处: 7 * ①减少了代码的冗余,提供了代码的复用性 8 * ②便于功能的拓展 9 * ③为之后的多态性,提供了前提 10 * 11 * 12 * 二.继承性的格式 class A extends B{} 13 * A:子类 派生类 subclass 14 * B:父类 超类 基类 superclass 15 * 16 * 体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有的:属性,方法 17 * 特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了 18 * 父类中的私有结构。 19 * 20 * 只是因为封装性的影响,使得子类不能直接调用父类的结构而已。 21 * 22 * 子类继承父类以后,还可以声明自己的属性和方法,实现功能的拓展。 23 * 24 * 子类和父类的关系,不同于集合和子集的关系。 25 * 26 * extends:延展,拓展 27 * 28 * 三.Java中关于继承性的规定 29 * 1.一个类可以被多个子类继承 30 * 2.单继承:一个类只能有一个父类 (C++可以多继承) 31 * 3.子父类是相对的概念。多层继承 32 * 4.子类直接继承的父类,成为:直接父类 33 * 子类间接继承的父类为:简介父类 34 * 5.子类继承父类以后,就获取了直接父类以及所有间接父类声明的属性和方法 35 * 36 * 四.1.如果我们没有显示的声明一个父类的话,则此类继承与 java.long.Object类 37 * 2.所有的Java类(除 java.long.Object类外),都直接或间接的继承 java.long.Object类. 38 * 3.意味着,所有Java类具有 java.long.Object类声明的功能。 39 * 40 */ 41 public class ExtendsTest 42 { 43 public static void main(String[] args) 44 { 45 Person p1 = new Person(); 46 // p1.age = 1; 47 p1.eat(); 48 //p1.sleep(); 49 50 p1.setAge(30); 51 System.out.println(p1.getAge()); 52 53 54 55 56 57 Student s1 = new Student(); 58 s1.eat(); 59 //s1.sleep(); 60 s1.name = "Tom"; 61 s1.setAge(10); 62 System.out.println(s1.getAge()); 63 64 s1.study(); 65 s1.breath(); 66 67 68 Creature c = new Creature(); 69 c.toString(); 70 71 } 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 }
1 package com.bytezero.inherit; 2 3 public class Creature //这个类 的父类是 java.long 4 { 5 public void breath() 6 { 7 System.out.println("呼吸"); 8 } 9 }
1 package com.bytezero.inherit; 2 3 public class Person extends Creature 4 { 5 String name; 6 7 //私有 8 private int age; 9 10 public Person() 11 { 12 13 } 14 public Person(String name ,int age) 15 { 16 this.name = name; 17 this.age = age; 18 } 19 20 public void eat() 21 { 22 System.out.println("吃饭"); 23 sleep();//调用 私有方法 同类中可以调用 24 } 25 26 //私有 27 private void sleep() 28 { 29 System.out.println("睡觉"); 30 31 } 32 33 34 public int getAge() { 35 return age; 36 } 37 public void setAge(int age) { 38 this.age = age; 39 } 40 41 42 43 44 }
1 package com.bytezero.inherit; 2 3 4 public class Student extends Person 5 { 6 // String name; 7 // int age; 8 String major; 9 10 public Student() 11 { 12 13 } 14 15 public Student(String name,int age,String major) 16 { 17 //this.age = age; 18 setAge(age); 19 this.name = name; 20 this.major = major; 21 } 22 23 // public void eat() 24 // { 25 // System.out.println("吃饭"); 26 // } 27 // public void sleep() 28 // { 29 // System.out.println("睡觉"); 30 // } 31 32 public void study() 33 { 34 System.out.println("学习"); 35 } 36 public void show() 37 { 38 System.out.println("name:"+name+",age:"+getAge()); 39 } 40 41 42 43 44 }