2017.12.1T19_B2_4.2
Posted 晓……晓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017.12.1T19_B2_4.2相关的知识,希望对你有一定的参考价值。
package com.xdf.bean;
/**
* Student is a Person
* Teacher is a Person
*
* 子类和父类满足 is a的关系!
* 学生是人类
* 老师是人类
* 司机是人类
*
* 继承使用的关键字是extends!
*
* 请问:
* 一个人有几个亲生父亲?
* 一个类只能有一个父类!
* Student》》》Person》》》Object
*
* 单根性! 单根继承 多实现
* extends implements
*
*
*
* 01.把Student和Teacher类中公共的代码 提取到Person类中
* 02.让Student和Teacher类继承Person类
*
* 继承的注意事项:
* 01.无论我们子类中是否调用super(),默认都会先去执行父类的无参构造!
* 除非子类中显示的调用了父类的带参构造!
* 02.父类中私有的属性或者方法,子类不能继承
* 03.父类的构造方法也不能继承
*
* 重写的注意事项:
* 01.有继承关系
* 02.不在一个类,子类重写父类的方法
* 03.方法名一致,参数列表一致
* 04.重写方法的访问权限修饰符不能严于父类
* 05.父类中的静态方法不允许被重写,但是子类中可以创建同名的静态方法
* 06.父类的私有方法 不允许被重写
* 07.如果父类的方法有返回值,我们子类重写的时候,可以返回这个值本身,也可以返回值的子类型!
*/
public class Person { // 人类
private int id; // 编号
private String name; // 姓名
private int age; // 年龄
private void showInfo() {
System.out.println("父类的私有方法");
}
public static void testStatic() {
System.out.println("父类的静态方法");
}
/**
* 父类中睡觉的方法
*/
public void sleep() {
System.out.println("人类在睡觉");
}
public void sleep(String name) {
System.out.println(name + "在睡觉");
}
/**例子:
* 我要去买个动物?
* 小猫
* 小狗
*
* 书写一个带有返回值的方法
*/
public Person getPerson() {
return new Person(); // 返回一个人类
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 Person(int id, String name, int age) {
System.out.println("Person类中的****带参构造");
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
super(); // Person已经没有父类了 所以调用Object
System.out.println("Person类中的****无参构造");
}
@Override
public String toString() {
return "[id=" + id + ", name=" + name + ", age=" + age + "]";
*************************************************************************
package com.xdf.bean;
public class PersonDemo {
/**
* 创建Student对象
Student stu = new Student();
stu.setId(1);
stu.setAge(60);
stu.setName("小黑");
System.out.println(stu); // 为什么输出 属性的值 而不是内存地址
System.out.println("**********************************");
// 创建Teacher对象
Teacher teacher = new Teacher();
teacher.setId(2);
teacher.setAge(18);
teacher.setName("小白");
System.out.println(teacher);
System.out.println("****************验证类的实例化顺序*******************");
Student stu1 = new Student();
System.out.println("****************验证带参构造*******************");
Student stu2 = new Student(1, "小黑", 50);
System.out.println(stu2);
*/
public static void main(String[] args) {
// 验证子类可以继承的内容
Student stu = new Student();
// stu.showInfo(); 父类中私有的方法
stu.sleep();
Teacher teacher = new Teacher();
teacher.sleep();
/**
* 问题 :
* 无论是哪个子类调用这个sleep方法 都会执行一样的内容 ? 这样合理吗?
*
* 方法的重写:
* 父类中只是定义了一个方法,具体内容 让子类去书写!
********************************************************************
package com.xdf.bean;
/**
* super关键字
* 01.只能出现在子类的方法中
* 02.如果是调用父类的构造方法 只能位于子类构造的第一句
* 03. super.属性 调用父类的属性
* super.方法 调用父类的方法
*
*/
public class Student extends Person { // 学生类
public Student(int id, String name, int age) {
// super(id, name, age); // 调用父类的 带参构造方法
System.out.println("Student类中的****带参构造");
}
public Student() {
// super(); 无论我们有没有显示的去调用 父类的 无参构造方法, 都会执行
System.out.println("Student类中的****无参构造");
}
/**
* 重写父类的方法
*/
@Override
public void sleep() {
System.out.println("学生 在睡觉");
}
/**
* 重写父类的静态方法
* shift+alt +s ===> override ==》
* 发现没有父类的静态方法
*/
public static void testStatic() {
System.out.println("子类的静态方法,和父类没关系! 但是可以同名");
}
/**
* 重写带有返回值的方法
*/
@Override
public Person getPerson() {
// return new Student();
return new Teacher();
}
***************************************************************
package com.xdf.bean;
public class Teacher extends Person { // 教师类
public Teacher(int id, String name, int age) {
super(id, name, age); // 调用父类的 带参构造方法
}
public Teacher() {
super();// 调用父类的 无参构造方法
}
/**
* 重写父类的方法
*/
@Override
public void sleep() {
System.out.println("教师 在睡觉");
以上是关于2017.12.1T19_B2_4.2的主要内容,如果未能解决你的问题,请参考以下文章