首页 > 代码库 > JAVA学习--面向对象的特征二:继承性

JAVA学习--面向对象的特征二:继承性

* 一、面向对象的特征二:继承性
 

* 1.为什么要设计继承性?
 *
 * 2.通过"class A extends B"类实现类的继承。
 *  子类:A  父类(或基类 SuperClass):B
 *   
 * 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
 *   明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接
 *       调用罢了。
 *  子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
 *   
 *  extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。
 *   
 *4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。
 * 5.子父类是相对的概念。
 *
 * 二、方法的重写  ---(方法的重载)    修饰符  返回值类型 方法名 (参数列表){}
 * 1.前提:有子类继承父类
 * 2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(overrideoverwrite)、覆盖、覆写。
 * 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 }

 

JAVA学习--面向对象的特征二:继承性