Java基础——继承
一、继承的实现
我们的子类可以通过继承获取父类的属性和方法,实例化是通过实例化的变量操作对象
//定义Person类
public class Person {    
    String name;
    int age;
    String gender;    
    public void say(){
         System.out.println("人能说话");
    }    
    public void sleep(){
         System.out.println("人能睡觉");
    }    
}
//定义Student类继承Person类
public class Student extends Person{
    String StudentNO;
    public void study(){
         System.out.println("学习");
    }
}
//定义Teacher 类继承Person类
public class Teacher extends Person{
    String TeacherNo;
    public void teach(){
         System.out.println("教书");
    }
}
//调用
Student s1=new Student();
Teacher t1=new Teacher();
s1.say();
t1.sleep();
二、注:java只能单继承不能多继承,可以连续继承
//定义Person类
public class Person {    
    String name;
    int age;
    String gender;    
    public void say(){
         System.out.println("人能说话");
    }    
    public void sleep(){
         System.out.println("人能睡觉");
    }    
}
//定义Student类继承Person类
public class Student extends Person{
    String StudentNO;
    public void study(){
         System.out.println("学习");
    }
}
//定义GoodStudent继承Student类
public class GoodStudent extends Student{}
//调用
GoodStudent goodStudent=new GoodStudent();
goodStudent.sleep();
三、方法的重写
当子类继承父类之后,子类调用父类的方法,但是如果父类额方法,不满足子类的需求,子类可以重写这个方法。
Person有南方人和北方人,南方人吃米饭,北方人吃馒头
重写的注意点:子类重写父类的方法,方法的声明必须和父类保持一致
//定义Person类
public class Person {    
    String name;
    int age;
    String gender;    
    public void eat(){
         System.out.println("人要吃饭");
    }    
}
//北方人类继承Person类
public class NorthPerson extends Person{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
      System.out.println("北方人吃馒头");
    }
}
//南方人类继承Person类
public class SouthPerson extends Person{
    @Override
    public void eat() {
     // TODO Auto-generated method stub
     System.out.println("南方人吃米饭");
    }
}
//调用
NorthPerson northPerson = new NorthPerson();
SouthPerson southPerson = new SouthPerson();
northPerson.eat();
southPerson.eat();
四、Super
super是一个关键字,代表父类的存储空间标识(可以理解为父类的引用)
//定义Person类
public class Person {
    String name;
    int  age;
    String gender;
    String address="山东";
    public void dosomthing(String thing){
     System.out.println("人能"+thing);
    }    
    public void eat(){
     System.out.println("山东人吃煎饼卷大葱");
    }    
    public void sleep(){
     System.out.println("人要睡觉");
    }    
}
//定义学生类使用,super调用父类的属性
public class Student extends Person{
    public void print(){
     System.out.println(super.address);
    }
}
//使用super调用父类的方法
public class Student extends Person{
    public void print(){
     System.out.println(super.address);
     //使用super调用父类的方法
     super.eat();
    }
}
五、继承中子类的构造方法
//定义Person类
public class Person {
    String name;
    int  age;
    String gender;
    String address="山东";
     //定义构造方法
     public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void dosomthing(String thing){
     System.out.println("人能"+thing);
    }    
    public void eat(){
     System.out.println("山东人吃煎饼卷大葱");
    }    
    public void sleep(){
     System.out.println("人要睡觉");
    }    
}
//此时要在Student中加上一个构造方法
public class Student extends Person{
    public Student(String name, int age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }
    public void print(){
        System.out.println(super.address);
        super.eat();
    }
}
//调用
public class Demo {
    public static void main(String[] args) {
    Student student = new Student("zs",22);
    student.print();
    System.out.println(student.name+student.age);
    }
}
总结:如果父类的构方法带有参数,则必须在子类的构造方法中通过super关键字调用父类的构造方法并加上合适的参数
如果父类构造方法没有参数,则在子类的构造方法中不需要使用super关键字调用父类构造方法,系统会自动调用父类的无参构造

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号