/*
* 继承:
* 提高代码的复用性,父类的功能,更一般化的字段和方法放在超类中。子类可以直接使用,且派生类通过扩展超类而特殊化,使子类功能更加强大
* Java中只支持单继承,一个类只有一个父类
* 使用extends关键字表示
* 继承是个体与个体之间的继承
* 私有化属性不能被继承
* 一个类如果没有显示继承另外一个类,则该类默认继承 Object
* java.lang.Object 是Java中所有类的超类,Object中的属性及方法所有类共享
*
* 目的:提高代码的重用性
*
* 作用:
* 代码重用,子类可以直接使用父类的方法和属性
* 便于扩展,如果父类功能不能满足子类需求,可以对父类方法进行重写
* 使用多态
*
* 语法:public class 类名 extends 父类名{类体}
*
* */
public class _01_Extends extends A {
public static void main(String[] args) {
SubClass sub = new SubClass();
SupClass sup = new SupClass();
// 父类的引用指向子类
SupClass sup1 = new SubClass();
sub.test3();
sup.test1();
// 因为继承,子类可以使用父类的属性
sub.test1();
sub.test2();
System.out.println("========");
sup1.test1();
double salary = ((SubClass) sup1).salary;
System.out.println(salary);
// 父类的引用指向子类,但不能调用子类独有的方法。父类对象转换成子类,即可使用子类独有的方法和属性,
((SubClass) sup1).test3();
int age = sub.age;
// 子类不继承父类的static变量和方法,这是属于类本身,但子类可以访问。static修饰和类属于同一级别
String name = sub.name;
System.out.println(age);
System.out.println(name);
System.out.println(sup1 instanceof SubClass);
System.out.println("=======");
// A中protected修饰属性,同类、同包、有继承(一定是通过子类去调用,static修饰可直接访问)
_01_Extends ss = new _01_Extends();
// 需要用子类对象去 调用protected修饰的属性
System.out.println(ss.i);
// System.out.println(A.i);
System.out.println(ss.x);
System.out.println(A.x);
}
}
// 没有显示继承,则默认继承Object
public class _02_Extends {
public static void main(String[] args) {
_02_Extends s = new _02_Extends();
String s1 = s.toString();
System.out.println(s1);
}
}