一、继承概念
1、继承是面向对象中的特性之一,能有效实现程序的复用。使用关键字extends实现
2、在继承关系中:
<1>子类可以得到父类的非私有属性和方法,这是从父类继承来的
<2>子类可以添加新的属性方法,添加父类所没有的
<3>子类可以重新定义父类的属性和方法,为自己所用
public class StudentTest {
public static void main(String[] args) {
Student s1 = new Student();
s1.name="小明";
s1.age=50;
s1.cid=2021523;
System.out.println("我是"+s1.name+"今年"+s1.age+"岁,"+"学号是:"+s1.cid);
s1.eat();
s1.working();
}
}
class Person{
String name;
int age;
public void eat(){
System.out.println("干饭中...");
}
}
class Student extends Person {
int cid;//学号
public void working(){
System.out.println("苦逼撸代码中...");
}
}
3、在实现继承时一些注意事项
<1>父子类在同一个包,子类可以继承父类中的非私有属性
<2>父子类不在同一个包,子类可以继承public类中的protected属性和pubilc属性
<3>子类可以定义与父类同名的属性,这时候子类讲不能直接访问父类的属性,称为属性的隐藏。(如果需要调用被隐藏的父类属性,静态属性可以使用"父类名.属性名",非静态属性可以使用"super.属性名"
二、方法的覆盖
1.子类将从父类继承下来的方法重新实现,叫做覆盖(Overriding),方法覆盖的原因是对应方法的行为不适应子类的需要,需要在子类中做出相应的调整。
public class TestOverriding {
public static void main(String[] args) {
new Animal().walk();
new Human().walk();
}
}
class Animal{
public void walk(){
System.out.println("我是低级动物,我用四条腿走路!");
}
}
class Human extends Animal{
@Override
public void walk(){
System.out.println("我是人类,我用两条腿走路!");
}
}
三、继承中的构造方法与super关键字
1、在创建子类对象时,它首先会调用父类中的构造方法,然后运行实例变量和静态变量的初始化器,最后才运行构造方法本身。(注意:类中没有任何构造方法时,默认系统会有一个无参的没有任何内容构造方法)
public class ConstructTest01 {
public static void main(String[] args) {
new KK();
}
}
class HH{
HH(){
System.out.println("HH的构造方法");
}
}
class KK extends HH{
KK(){
System.out.println("KK的构造方法");
}
}
看会爆红!!!
public class ConstructTest02 {
public static void main(String[] args) {
new BB();
}
}
class AA{
int a;
AA(int a){
this.a=a;
System.out.println("AA的构造方法");
}
}
class BB extends AA{
BB(){
super(1);
System.out.println("BB的构造方法");
}
}
注意:如果调用父类的构造方法,super语句必须放在构造方法的第一条