面向对象的特征二继承性及方法的重写
代码一
package eight;
public class Worker extends Person{
public void eat(){
System.out.println("工人吃饭");
}
// private String name;
// private int age;
//
// public String getName(){
// return name;
// }
// public void setName(String name){
// this.name = name;
// }
// public int getAge(){
// return age;
// }
// public void setAge(int age){
// this.age = age;
// }
// public void eat(){
// System.out.println("吃饭");
// }
// public void walk(){
// System.out.println("走路");
// }
}
代码二
package eight;
/**
* super:可以用来修饰属性、方法、构造器
*
* 1)当子类与父类中有同名的属性时,可以通过「super.此属性」显式的调用父类中声明的属性。
* 若想调用子类的同名的属性「this.此属性」
* 2)当子类重写父类的方法以后,在子类中若想再显式的调用父类的被重写的方法,就需要使用「super.方法」
* 3)super 修饰构造器,通过在子类中使用「super(形参列表)」来显式的调用父类中指定的构造器。
* >在构造器内部,「super(形参列表)」必须要声明在首行。
* >在构造器内部,「this(形参列表)」或「super(形参列表)」只能出现一个。
* >当构造器中,不显式的调用「this(形参列表)」或「super(形参列表)」其中任何一个,默认调用的是
* 父类空参的构造器。
*
* 注意:设计一个类时,尽量要提供一个空参的构造器。
*/
//class A{
//
//}
//public class Student extends Person,A{//非法
public class Student extends Person{
// private String name;
// private int age;
private String schoolName;
int id = 1002;
public Student(){
super();
}
public Student(String name,int age){
// this.name = name;
// this.age = age;
this.setName(name);
this.setAge(age);
}
public Student(String schoolName){
super(16190130,180);
this.schoolName = schoolName;
}
public String getSchoolName(){
return schoolName;
}
// public String getName(){
// return name;
// }
// public void setName(String name){
// this.name = name;
// }
// public int getAge(){
// return age;
// }
// public void setAge(int age){
// this.age = age;
// }
// public void eat(){
// System.out.println("吃饭");
// }
// public void walk(){
// System.out.println("走路");
// }
//对父类同名的方法的重写、覆盖。
public void eat(){
System.out.println("我想喝安慕希");
}
public void walk(){
System.out.println("走了十里路");
}
public void info(){
eat();
System.out.println("我是一个学生");
}
//不是对父类私有的 sleep()方法的重写。
private int sleep(){
return 0;
}
public void show(){
System.out.println(this.id);
System.out.println(super.vision);
System.out.println(super.id);
}
}
代码三
package eight;
/**
* 一、面向对象的特征二:继承性
* 1.为什么要设计继承性?
*
* 2.通过「class A extends B」类实现类的继承
* 子类:A(或基类 SuperClass) 父类:B
*
* 3.子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
* 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,
* 使得子类不可以直接调用罢了。
*
* 子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
*
* extends:子类是对父类功能的“拓展”,明确子类不是父类的子集。
*
* 4.Java中类的继承性只支持单继承!一个类只能继承一个父类,反之,一个父类可以有多个子类
* 5.子父类是相对的概念。
*
* 二、方法的重写: -----修饰符 返回值类型 方法名 (参数列表){}
* 1.前提:有子类继承父类
* 2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)、覆盖、覆写。
* 3.重写的规则:1)要求子类方法的「返回值类型 方法名 (参数列表)」与父类的方法一样。
* 2)子类方法的修饰符不能小于父类方法的修饰符
* 3)*若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的。
* 4)*子父类的方法必须同为 static 或同为非 static 的。
*
*/
public class TestStudentWorker {
public static void main(String[] args) {
Student s = new Student();
s.eat();
Worker w = new Worker();
w.eat();
Person p = new Person();
p.eat();
s.setAge(13);
s.setName("小七");
System.out.println(s.getName() + ":" + s.getAge());
Teacher t = new Teacher();
t.eat();
t.info();
t.show();
System.out.println();
s.show();
System.out.println();
Student s1 = new Student("清华大学");
System.out.println(s1.getName() + ":" + s1.getAge() + "," + s1.getSchoolName());
}
}
代码四
package eight;
public class Person {
private String name;
private int age;
protected double vision;
protected double stature;
int id = 1001;
public Person(){
this.vision = 5.0;
this.stature = 170;
}
public Person(double vision){
this();
this.vision = vision;
}
public Person(int id,double stature){
this(id);
this.stature = stature;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void walk(){
System.out.println("走路");
}
private int sleep(){
return 0;
}
}
韧桂 2019-12-25