一、继承
使用要点:
1.父类也称作超类、基类、派生类等。
2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。(类只有单继承,接口有多继承)
3.Java中类没有多继承,接口有多继承。
4.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)。
5.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
package cn.s; public class TestExtends { public static void main(String[]args) { Student stu=new Student(); stu.name="sun"; stu.old=18; stu.rest(); Student stu2=new Student("@sun",18,"play"); System.out.println("我的名字是:"+stu2.name); System.out.println(stu2 instanceof Student); //用于判断该对象是否属于该类。 System.out.println(stu2 instanceof Person); System.out.println(stu2 instanceof Object); } } class Person { String name; int old; public void rest() { System.out.println("休息一会!"); } } class Student extends Person{ String major; public void study() { System.out.println("学习两小时"); } public Student(String name,int old,String major) {//构造方法 this.name=name; this.old=old; this.major=major; } public Student() { } }
方法的重写 override
方法的重写需要符合下面的三个要点:
1.“==” :方法名、形参列表相同。
2.“<=” :返回值类型和声明异常类型,子类小于等于父类。
3.“>=” :访问权限,子类大于等于父类。
package cn.s; public class TestOverride { public static void main(String[]args) { Horse h= new Horse(); h.run(); } } class Vehicle{ public void run() { System.out.println("快点跑"); } public void stop() { System.out.println("停下来"); } public Person who() { return new Person(); //Person 类 } } class Horse extends Vehicle{ //继承父类 public void run() { //对父类方法的重写; System.out.println("已经够快了"); } public Student who() { //student类 return new Student(); //返回值类型子类小于等于父类 } }
Object 类是所有java 类的根基类,也就意味着所有的java 对象都拥有Object类的属性和方法。
package cn.s; public class TestObject { public static void main(String args[]) { TestObject to =new TestObject(); System.out.println(to.toString()); ACP p=new ACP("sun",18); //对象 System.out.println(p.toString()); } public String toString() { return "测试object"; } } class ACP{ String name; int age; public String toString() { //在ACP中重写toString方法 return "姓名:"+name+",年龄:"+age; } public ACP(String name,int age) { this.name=name; this.age=age; } }
super父类对象引用——继承树追溯问题