[关闭]
@liruiyi962464 2017-03-20T11:22:31.000000Z 字数 4300 阅读 457

面向对象 继承

java

OOP三大特性

  • 封装 encapsulation
  • 继承 inheritance
  • 多态 polymorphism

继承的优点

  • 增强了代码的复用性减少代码的冗余
  • 正是因为有了继承才有了后边的多态

extends关键字

  • 在java语言中,用extends关键字来表示一个类继承了另一个类
  1. public class Teacher extends Person{
  2. //其余代码省略
  3. }

继承关系

  • 子类继承父类特点:子类将拥有父类所有的方法以及属性()
  • 注意:
  • (1)父类中的成员(方法及属性)由private修饰子类无法继承
  • (2)父类的构造方法子类无法继承‘
  • (3)子类还可有拥有自己的方法以及属性
  • java属于单继承,不支持多继承(所有的类都只能有一个父类)
  • java不支持多继承(所有的类都只能有一个父类),但是支持多层继承

多层继承

Animal类

  1. public class Animal {
  2. private String name;
  3. public String getName() {
  4. return name;
  5. }
  6. public void setName(String name) {
  7. this.name = name;
  8. }
  9. }

Pet类

  1. public class Pet extends Animal{}

Dog类

  1. public class Dog extends Pet{}

Test测试类

  1. public class Test {
  2. public static void main(String[] args) {
  3. Dog dog = new Dog();
  4. dog.setName("旺财");
  5. String name = dog.getName();
  6. System.out.println(name+"是一只粉色的小狗");
  7. }
  8. }

单继承(错误)举例说明:

  1. public class A{
  2. public void D(){}
  3. }
  4. public class B{
  5. public void D(){}
  6. }
  7. public class C extends A.B{
  8. //类中不允许出现2个完全相同的方法,这种写法是错误的,违背了java的单继承思想
  9. public void D(){}
  10. public void D(){}
  11. }

父类Person

  1. public class Person {
  2. private String name;
  3. private String sex;
  4. private int age;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public String getSex() {
  12. return sex;
  13. }
  14. public void setSex(String sex) {
  15. this.sex = sex;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. }

子类Student

  1. public class Student extends Person {
  2. private String stuNo;
  3. public String getStuNo() {
  4. return stuNo;
  5. }
  6. public void setStuNo(String stuNo) {
  7. this.stuNo = stuNo;
  8. }
  9. public void showMessage(){
  10. System.out.println("姓名:"+this.getName());
  11. System.out.println("性别:"+this.getSex());
  12. System.out.println("年龄:"+this.getAge());
  13. System.out.println("学号:"+this.getStuNo());
  14. }
  15. }

子类Teacher

  1. public class Teacher extends Person{
  2. private String teaNo;
  3. public String getTeaNo() {
  4. return teaNo;
  5. }
  6. public void setTeaNo(String teaNo) {
  7. this.teaNo = teaNo;
  8. }
  9. public void showMessage(){
  10. System.out.println("姓名:"+this.getName());
  11. System.out.println("性别:"+this.getSex());
  12. System.out.println("年龄:"+this.getAge());
  13. System.out.println("工号:"+this.getTeaNo());
  14. }
  15. }

测试类

  1. public class Test {
  2. public static void main(String[] args) {
  3. System.out.println("学生信息如下所示:");
  4. Student stu = new Student();
  5. stu.setName("苍井空");
  6. stu.setSex("女");
  7. stu.setAge(18);
  8. stu.setStuNo("9527");
  9. stu.showMessage();
  10. System.out.println("老师信息如下所示:");
  11. Teacher tea = new Teacher();
  12. tea.setName("饭岛爱");
  13. tea.setSex("女");
  14. tea.setAge(18);
  15. tea.setTeaNo("9527");
  16. tea.showMessage();
  17. }
  18. }

super关键字

super和this这2大关键字的区别和联系

  • this:代表当前类的对象,通过this可以访问当前类的成员
  • super:代表当前类的父类对象,通过super可以访问父类的成员
  • 使用super.父类成员 对应的属性或方法直接到父类里面去查找
  • 使用this.父类成员 对应的属性或方法先到当前类里面去查找对应的属性或方法 如果没有找到,才去父类里面查找对应的属性或方法
  • super();//调用父类默认构造方法
  • 注意:不写也代表调用父类默认构造方法
  • 调用父类构造方法是必须放在子类的构造方法内,而且必须放在构造方法的第一行

调用默认父类的构造方法

  1. public Pet(String name, int age, String sex, int health) {
  2. super();//调用父类默认构造方法
  3. this.name = name;
  4. this.age = age;
  5. this.sex = sex;
  6. this.health = health;
  7. }
  1. public Pet(String name, int age, String sex, int health) {
  2. super(name,age,sex,health);//调用父类默认构造方法
  3. }

父类

  1. public class Pet {
  2. private String name;
  3. private int age;
  4. private String sex;
  5. private int health;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public int getAge() {
  13. return age;
  14. }
  15. public void setAge(int age) {
  16. this.age = age;
  17. }
  18. public String getSex() {
  19. return sex;
  20. }
  21. public void setSex(String sex) {
  22. this.sex = sex;
  23. }
  24. public int getHealth() {
  25. return health;
  26. }
  27. public void setHealth(int health) {
  28. this.health = health;
  29. }
  30. }

子类

  1. public class Penguin extends Pet{
  2. private String petNo;
  3. public Penguin(String name, int age, String sex, int health,String petNo) {
  4. super.setName(name);
  5. super.setAge(age);
  6. super.setSex(sex);
  7. super.setHealth(health);
  8. super(name,age,sex,health);//相当于上边
  9. this.petNo = petNo;
  10. }
  11. public String getPetNo() {
  12. return petNo;
  13. }
  14. public void setPetNo(String petNo) {
  15. this.petNo = petNo;
  16. }
  17. }

方法重写

  1. 方法重写:发生在子类和父类之间
  2. 对于方法从写的理解:实质上就是子类将继承自父类的方法进行改写
    注意:
    (1)重写方法(子类)与被重写方法(父类) 方法名称 返回值 参数列表必须保持一致
    (2)子类方法(重写)访问修饰符子类访问权限不能小于父类方法(被重写方法)的访问权限
    3.子类对象调用父类重写方法是默认调用的是从写后的方法

父类Animal

  1. public class Animal {
  2. public void music(){
  3. System.out.println("父类方法被调用,动物发出的叫声");
  4. }
  5. }

子类Dog

  1. public class Dog extends Animal{
  2. public void music(){
  3. System.out.println("子类重写父类方法被调用,小狗~~~汪汪汪");
  4. }
  5. }

测试类

  1. public class Test {
  2. public static void main(String[] args) {
  3. Dog dog = new Dog();
  4. dog.music();
  5. }
  6. }

final关键字

final关键字特点

  • final可以用来修饰变量,方法,类
  • final修饰的变量是一个常量,一旦赋了值就不能在修改(常量一般都和static关键字配合使用)
  • final修饰类代表此类不能被继承
  • final修饰方法代表此方法不能被重写
  1. public class Dog extends Animal{
  2. public final static String name="张小明";
  3. }
  4. public class Test {
  5. public static void main(String[] args) {
  6. String name = Dog.name;
  7. System.out.println(name);
  8. }
  9. }

toString

  1. //将当前对象转换成字符串输出
  2. public String toString() {
  3. String str = "姓名"+name+"性别"+sex+"年龄"+age+"编号"+idCard;
  4. return str;
  5. }
  6. public static void main(String[] args) {
  7. Person person = new Person("张三","女",18,"9527");
  8. System.out.println(person);
  9. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注