JAVA-6-继承、super、final、多态、抽象类、接口

本文详细介绍了Java中的继承、多态、抽象类、super和final关键字以及接口的使用。通过实例展示了如何利用这些特性实现代码的复用性和维护性,强调了“is a”和“like a”的关系,并探讨了何时使用继承。此外,还讨论了final关键字在防止方法重写和变量篡改中的作用,以及多态的实现和成员访问特点。
摘要由CSDN通过智能技术生成

一:继承
  1.1如何表达这个关系呢?
    通过extends关键字可以实现类与类的继承
      格式:
        class 子类名 extends 父类名 {
        …
        }
      父类也可以叫做基类,超类;子类也可以叫做派生类
  举例对比继承和非继承下代码,需求:
    学生类:
      成员变量:name,age
      构造方法:无参,带参
      成员方法:getXxx()/setXxx(),eat(),sleep()
    老师类:
    成员变量:name,age
      构造方法:无参,带参
      成员方法:getXxx()/setXxx(),eat(),sleep()      
非继承版代码如下:
学生类代码:

package exercise01;

public class Student {
//  私有化成员变量
    private String name ;
    private int age ;
//  为被私有化的成员变量分别提供setXxx/getXxx对外公共访问方法
    public void setName(String name){
        this.name=name;//this指代本类中对象,谁调用我我指代谁
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }

//  提供无参、有参构造方法
    public Student(){}
    public Student(String name,int age){
        this.age=age;
        this.name=name;
    }

//  提供其他成员方法
    public void eat(){
        System.out.println("学生爱吃米饭");
    }
    public void sleep(){
        System.out.println("学生喜欢侧着睡");
    }
}

老师类代码:

package exercise01;

public class Teacher {
    private String name;
    private int age;


    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }


    public Teacher(){}
    public Teacher(String name,int age){
        this.age=age;
        this.name=name;
    }


    public void eat(){
        System.out.println("老师爱吃馒头");
    }
    public void sleep(){
        System.out.println("老师喜欢躺着睡");
    }

}

测试类:

package exercise02;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();//新建学生类对象
//      利用set方法进行初始化
        s.setAge(10);
        s.setName("lisi");
        s.eat();
        s.sleep();
        System.out.println(s.getName()+"  "+s.getAge());
        System.out.println("-----");
        Teacher t=new Teacher();
        t.sleep();
    }

}
//学生爱吃米饭
//人类需要睡眠
//lisi  10
//-----
//老师喜欢倒着睡
//学生爱吃米饭
//学生喜欢侧着睡
//张三   23
//------
//12  李四
//老师爱吃馒头
//老师喜欢躺着睡

1.2需求:(需要加入方法重写)
  针对老师类、学生类按照我们刚才对继承的概述,我们可以找一个父类。
    人类:
      成员变量:name,age
      构造方法:无参,带参
      成员方法:getXxx()/setXxx(),eat(),sleep()
那么,学生类继承人类就可以了;老师类同样继承人类就可以了。
继承版代码如下:
①建立Person类:

package exercise02;

//建立Person类
public class Person {
//  私有化成员变量
    private String name;
    private int age;
//  分别为私有化成员变量提供set/get对外公共访问方式
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return age;
    }

//  提供无参、有参构造方法
    public Person(){}
    public Person(String name ,int age){
        this.age=age;
        this.name=name;
    }
//  提供其他成员方法
    public void eat(){
        System.out.println("人类需要吃饭");
    }
    public void sleep(){
        System.out.println("人类需要睡眠");
    }
}

②学生类继承Person类,并重写eat()方法:

package exercise02;

public class Student extends Person{
   //学生类继承Person类
//  如果父类的方法不满足子类的需求,子类可以写一个一摸一样的方法在自己的类体中,这样就实现了方法重写
//  由于Person类中的eat()方法不能满足学生类eat()方法,因此需要重写eat()方法
    public void eat(){
        System.out.println("学生爱吃米饭");
    }   
}

③老师类继承Person类,并重写sleep()方法:

package exercise02;

public class Teacher {
//重写sleep()方法
    public void sleep(){
        System.out.println("老师喜欢倒着睡");
    }
}

④新建Test类进行测试:

package exercise02;

public class Test {
    public static void main(String[] args) {
        Student s = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值