JAVA学习--面向对象的特征二:继承性
* 一、面向对象的特征二:继承性
* 1.为什么要设计继承性?
*
* 2.通过"class A extends B"类实现类的继承。
* 子类:A 父类(或基类 SuperClass):B
*
* 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
* 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接
* 调用罢了。
* 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
*
* extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。
*
* 4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。
* 5.子父类是相对的概念。
*
* 二、方法的重写 ---(方法的重载) 修饰符 返回值类型 方法名 (参数列表){}
* 1.前提:有子类继承父类
* 2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)、覆盖、覆写。
* 3.重写的规则: 1)要求子类方法的“返回值类型 方法名 (参数列表)”与父类的方法一样
* 2)子类方法的修饰符不能小于父类方法的修饰符
* 3)*若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的。
* 4)*子父类的方法必须同为static或同为非static的。
*
* 2.通过"class A extends B"类实现类的继承。
* 子类:A 父类(或基类 SuperClass):B
*
* 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
* 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接
* 调用罢了。
* 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
*
* extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。
*
* 4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。
* 5.子父类是相对的概念。
*
* 二、方法的重写 ---(方法的重载) 修饰符 返回值类型 方法名 (参数列表){}
* 1.前提:有子类继承父类
* 2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)、覆盖、覆写。
* 3.重写的规则: 1)要求子类方法的“返回值类型 方法名 (参数列表)”与父类的方法一样
* 2)子类方法的修饰符不能小于父类方法的修饰符
* 3)*若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的。
* 4)*子父类的方法必须同为static或同为非static的。
1 public class TestExtends { 2 public static void main(String[] args) { 3 Student s = new Student(); 4 s.eat(); 5 6 Worker w = new Worker(); 7 w.eat(); 8 9 Person p = new Person(); 10 p.eat(); 11 12 s.setAge(12); 13 s.setName("麻华龙"); 14 System.out.println(s.getName() + ":" + s.getAge()); 15 16 Graduate g = new Graduate(); 17 g.eat(); 18 g.info(); 19 g.show(); 20 } 21 } 22 23 class Person { 24 private String name; 25 private int age; 26 27 public String getName() { 28 return name; 29 } 30 31 public void setName(String name) { 32 this.name = name; 33 } 34 35 public int getAge() { 36 return age; 37 } 38 39 public void setAge(int age) { 40 this.age = age; 41 } 42 43 public void eat() { 44 System.out.println("吃饭"); 45 } 46 47 void walk() { 48 System.out.println("走路"); 49 } 50 private void sleep(){ 51 52 } 53 } 54 55 class A{ 56 57 } 58 59 class Student extends Person{ 60 // class Student extends Person,A{ 61 // private String name; 62 // private int age; 63 private String schoolName; 64 65 public Student(){ 66 67 } 68 public Student(String name,int age){ 69 // this.name = name; 70 // this.age = age; 71 this.setName(name); 72 this.setAge(age); 73 } 74 75 // public String getName() { 76 // return name; 77 // } 78 // public void setName(String name) { 79 // this.name = name; 80 // } 81 // public int getAge() { 82 // return age; 83 // } 84 // public void setAge(int age) { 85 // this.age = age; 86 // } 87 // 88 // 对父类同名的方法的重写、覆盖 89 public void eat(){ 90 System.out.println("应该多吃有营养的"); 91 } 92 public void walk(){ 93 System.out.println("背着书包蹦蹦跳跳的走路"); 94 } 95 public void info(){ 96 eat(); 97 //System.out.println("name:" + name); 98 System.out.println("我是一个学生"); 99 } 100 //不是对父类私有的sleep()方法的重写。 101 private int sleep(){ 102 return 0; 103 } 104 105 } 106 107 108 109 class Worker extends Person{ 110 public void eat(){ 111 System.out.println("工人吃饭"); 112 } 113 114 public void walk(){ 115 116 } 117 } 118 119 class Graduate extends Student{ 120 public void show(){ 121 System.out.println("我是一个研究生"); 122 } 123 }