继承:
Dog:name age weight strain(品种)
Cat:name age weight gender
将多个类中相同的信息(属性+方法)提取出来,多个类可以共用这部分信息。
通过继承的机制来完成。
将Dog和Cat相同的信息提取到Animal,然后
让Dog和Cat继承Animal,表示继承了Animal中的信息。
Java中如何设置两个类的继承关系?
**通过extends关键字来完成
class B{
}
class A extends B{
}**
package 公司域名倒置 开发文档 命名规范 结尾以模块功能比如 entity
A是子类(派生类),B是父类(超类)
一旦两个类通过extends完成关联之后,这两个类就具备了父子级的关系。
继承的好处:
Java中的继承是代码复用(重用)的一种非常重要的方式,优点减少代码量,方便代码的维护(父类修改后 子类继承的东西也会被修改)。(代码优化的范围:在2个类里面)
继承的概念:一个类继承(拥有)另外一个类的属性和方法,被继承的类叫父类,继承的类叫子类。
Java只支持单继承,即一个类只能拥有一个直接父类。
父类包括直接父类,间接父类。
Dog-extends-> Pet-enxtends-> Animal
Pet是Dog的直接父类,Animal是Pet的直接父类,Animal是Dog的间接父类。
语法:
父类:
public class 类名{
属性+方法
}
子类:
public class 类名 extends 父类名{
子类特有的属性+方法
}
继承里面的内含规则:
实例化一个子类对象时,一定会优先实例化其父类对象,并且实例化父类的操作是系统自动完成,不需要我们手动去编写代码。
super()的概念;在子类中显式调用父类的无参构造,
super();是默认存在,不需要显式调用,跟无参构造相同,默认存在,不需要显式定义。
如果显式调用,super()必须写在第一行,否则语法错误,不能编译。
在子类中可以使用super调用方法,也可以访问属性,只能访问父类的公有(public)的信息,私有(private)是无法访问的。如需调用可以改成protected
private私有的属性和方法 只能他自己去调用
super的语法:
访问属性:super.属性名
super.age = 1;
调用方法:super.方法名
super.test();
super.test(1,2);
调用构造方法:super()调用无参构造,
super(参数列表)调用有参构造。
super();
super(1,2);
必须写在第一行
super的使用:
子类的构造函数中可以通过super来访问父类的所有公有信息(属性,方法,构造方法)。
子类的普通方法中通过super可以访问属性和方法,但是不能调用构造方法。
Java中的每一个类都是一个子类(Object除外 因为都默认继承了Object类),但是不是每一个类都是父类。
super关键字使用时的注意事项:
1.super只能出现在子类的方法和构造方法中。
2.super调用构造方法时,必须写在第一行,也必须写在子类的构造方法中。构造函数的目的就是让外部去实例化这个对象
3.super不能访问父类的private的属性和方法。
super VS this
相同点:1.super和this都可以访问类中的属性,方法,构造方法。
2.super和this访问构造方法时,必须写在第一行。
3.super和this访问构造方法时,必须写在构造方法中,不能在普通方法中调用。
不同点:1.super是子类访问父类,维护两个类之间的关系,
this是自己访问自己,维护一个类的关系。
2.super不能访问私有属性和方法,this可以访问私有属性和方法。
子类不能继承父类的构造方法。构造方法 创建对象
子类能继承(extends)父类的哪些属性和方法?
1.使用public和protected修饰的属性和方法。
2.默认访问权限修饰符修饰的属性和方法,子类和父类必须在同一个包中。可以理解默认修饰符是包修饰符
访问权限修饰符:public protected private 默认(不用写)
子类无法继承的
1.private修饰的属性和方法
2.默认访问权限修饰符修饰的属性和方法,子类和父类不在同一个包中。
3.构造方法。
实际开发中何时使用继承?
真实世界中,如果两个对象符合 is-a 关系就可以使用继承
对象A 对象B
A is a B 这句话成立,符合客观真实的逻辑关系,表示A和B符合
is-a关系,则A对应的类和B对应的类可以建立继承关系
dog animal
dog is a animal 成立 Dog类和Animal类可以建立继承关系
Dog继承Animal
is-a 左侧的类继承右侧的类,左侧的类是子类,右侧的类是父类
animal is a dog
继承中的方法重写/覆盖Override
只有在继承关系中才有重写的概念,
概念:子类根据需求对从父类继承的方法进行重新编写
父类的方法不能显示子类特有的属性时,就需要对父类方法进行重新
如何实现重写
在子类中重新去定义父类中已存在的需要被覆盖的方法
当调用子类对象的某个继承自父类的方法时,如果子类没有对
该方法进行重写,则调用的是父类的方法,如果子类对该方法
进行重写,则调用的是子类的重写方法。
重写需要注意的事项:
1.进行重写时,可以使用super.方法名的方式保留父类方法的业务逻辑。
2.构造方法不能被重写。