package cn.tedi.forwhile;
public class TestExtends {
public static void main(String[] aregs){
Father f = new Father();
f.eat();
f.work();
Father f1 = new Son();
f1.eat();
f1.work();
f1.name = "Geroge";
f1.age = 18;
System.out.println(f1.name);
System.out.println(f1.age);
Son s = new Son();
s.eat();
s.work();
}
}
class Father{
String name;
int age;
public void eat(){
System.out.println("规律饮食");
}
public void work(){
System.out.println("每天工作八小时");
}
}
class Son extends Father{
public static void eat(){
System.out.println("吃零食");
}
public static void work(){
System.out.println("每天学习八小时");
}
}
继承
1.我们通过extends关键字建立子类与父类的继承关系
如:Cat extends Animal ,Cat是子类【派生类】,Animal是父类【超类】
2.子类继承父类,相当于把父类的功能复制了一份
但是:私有资源也会继承,只是由于private修饰不可见
但是2:构造方法不可以被继承,由于构造方法的定义所致
3.Java只支持单继承:一个子类只能有一个父类,但是一个父类可以有多个子类
4.继承具有传递性,爷爷的功能会传给爸爸,爸爸的功能会传给孙子
5.子类可以修改父类的功能修改,也可以拥有自己独有方法进行功能拓展
6.继承是is a的关系,依赖性非常强,强耦合
前提:继承后,子类可以直接使用父类的非私有资源
继承之成员变量
1.如果成员变量没有重名,子类可以直接使用
2.如果存在父类成员变量与子类成员变量重名的情况,使用super进行指定
super是一个关键字,可以看作是父类的对象,如Cat super = new Cat();
位置要求:必须是第一行,格式:super.变量名
继承之方法
重写:继承后,子类对父类的方法实现不满意,想修改
重写的规则:两同两小一大
两同:方法名与参数列表和父类保持一致
两小:子类方法的返回值类型 <= 父类方法的返回值类型
子类方法抛出的异常类型 <= 父类方法抛出的异常类型【还没学到】
一大:子类方法的修饰符 >=父类方法的修饰符
注意:父类的私有方法不可以被重写,因为私有资源不可见,即子类无权修改父类的私有方法
继承之构造方法
1.在创建子类对象时,会调用构造方法,而子类构造方法中的第一行就是super();
即:创建子类对象,会先调用父类的构造方法
2.子类构造方法中必须调用父类无参构造
如果没有无参构造,需要手动调用父类的其他构造方法
3.构造方法不可以被继承
4.super()–表示调用父类的无参构造
super("")–表示调用父类的含参构造,此处举例是一个String类型的参数
静态
1.静态的关键字是static
2.静态可以修饰成员变量和方法,被静态修饰的资源被称作静态资源
3.静态优先于对象进行加载,随着类的加载而加载
4.静态资源被全局所有对象共享,值只有一份
5.静态资源可以通过类名直接调用
调用关系:静态资源只能调用静态资源
非静态资源既可以调用非静态资源,也可以调用静态资源