/*
- 面向对象特性之继承
*1.为什么要有继承? - 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,
- 那么多个类无需再定义这些属性和行为,只要继承那个类即可。
- 此处的多个类称为子类(派生类),单独的这个类称为父类(基类 或超类)。
- 2.类继承语法规则:
- class Subclass extends SuperClass{
- }
- 一旦子类继承父类以后,子类就获取了父类中声明的所有属性和方法。
- 如果父类中又私有的属性和方法,子类也会获取到父类的私有结构,但因为封装性的影响,子类不能直接调取
- 子类在继承父类以后还可以定义自己特有的属性和方法,以实现功能的扩展。
- 子类和父类的关系,不同于集合与子集的关系,子类的功能通常比父类强大。
- 3.继承的优点:
- 减少代码冗余,提高代码复用性。
- 便于功能的扩展。
- 为多态性的使用提供前提
- 4.java中关于继承的规定
- 一个类可以有多个子类,
- 一个类只能有一个父类,只支持单继承,不支持多重继承
- 类可以多层继承,父类的子类也可以有子类的子类(孙类)
- 子类直接继承的父类是直接父类,间接继承的父类是间接父类
- 子类继承父类后,就获取了直接父类以及所有间接父类的属性和方法
- java中所有类(除java.lang.Object类外)都直接或间接继承java.lang.Object类
- 也就是所有的java类都有java.lang.Object声明的功能。
- 5.继承其他包中的类需要导包,继承其他包中的类需要父权限为public。
- 父类中权限为protected 的属性和方法可以在不同包的子类的方法体构造器中调用,但不能被子类的实例化对象调用
- Debug工具:
- 排查bug的方式:
- 1,在程序中设置输出语句,查看各阶段运行情况,适用于代码量少的情况
- 2,适用Eclips的Debug工具,设置断点,查看各个变量的变化是否与预期一致
- Debug工具常用操作:
- 1step into 进入当前行所用的方法中查看源码
- 2step over 执行当前行语句。进入下一行
- 3step return 执行完当前行所在的方法,进入下一行
- 4drop to frame 回到当前行所在方法的第一行,重新浏览方法体
- 5resume 执行完当前行所在断点的所有代码,进入下一断点,如果其后没有断点则结束。
*/
创建父类
package object_chapter2;
public class ExtendsTest {
public String name = "testname";
private int age = 18;
int number = 100;
protected int argus = 33;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getArgus() {
return argus;
}
public void setArgus(int argus) {
this.argus = argus;
}
}
创建不同包的子类
package exercise;
import object_chapter2.*;
//import exercise.ObjectTest;
public class Test {
public static void main(String[] args) {
Subclass sc = new Subclass();
sc.test();
System.out.println(sc.name);
System.out.println(sc.getArgus());
Subclass sc1 = new Subclass(43);
System.out.println(sc1.getArgus());
System.out.println(new Subclass().getArgus());
}
}
class Subclass extends ExtendsTest{
public Subclass() {
}
public Subclass(int argus) {
this.argus = argus;
}
public void test() {
argus = 23;
name = "KK";
}
public int getArgus() {
return argus;
}
}