一:继承
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 =