Java SE 面向对象:继承

Java SE 面向对象:继承

目录

  • Java SE 面向对象:继承
    • 1、继承定义
    • 2、父类与子类
    • 3、实现继承
    • 4、继承要点
      • 4.1 代码
    • 5、super( )

面向对象设计原则之一:
开闭原则
   对修改关闭
   对扩展开放

1、继承定义

继承: 子承父业

  目的:为了提高代码的复用性。 extands 的意思是“扩展”。子类是父类的扩展。

2、父类与子类

  • 子类|派生类: 继承父类的类
  • 父类|基类|超类: 被继承的类 ——抽取子类的共性定义在父类中
  • 类: 抽取对象的共性

3、实现继承

class 子类 extends 父类{ }

4、继承要点

  • 子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法)。

  • 子类中定义子类独有的内容

  • 一个父类可以存在多个子类

  • 单继承机制,一个子类只能存在一个父类

    1. 简单
    2. 不够灵活,不便于 程序的后期维护
  • 定义一个类时,没有调用extends,则它的父类是: java.lang.Object 。

  • 接口实现多继承(了解)

4.1 代码

ExtendsDemo07.java

public class ExtendsDemo07 {
    public static void main(String[] args) {
        Cat cat =new Cat("hah","布偶");
        Dog dog =new Dog ("wuwu","土狗");
    }
}

Animal.java

public class Animal {
    String name;
    int age;
    String type;
    char sex;
    int size;

    public Animal(){

    }

    public void eat(){
        System.out.println("吃");
    }
    public void sleep(){
        System.out.println("睡");
    }
    public void cute(){
        System.out.println("买萌");
    }
}

Cat.java

public class Cat extends Animal{
    public Cat(){

    }
    public Cat(String name,String type){
        this.name=name;
        this.type=type;
    }

    public void grab(){
        System.out.println("抓老鼠");
    }
}

Dog.java

public class Dog extends Animal{

    public Dog(){

    }
    public Dog(String name,String type){
        this.name=name;
        this.type=type;
    }

    public void gatekeeper(){
        System.out.println("看门");
    }
}

5、super( )

  super 是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。

普通方法: 没有顺序限制。可以随便调用。

  • 在子类的构造器首行,调用父类构造器
    • super(实参)
    • 如果没有显示调用父类的指定构造器,默认在子类构造器的首行调用父类的空构造 super( )
    • this()与super()在构造器的首行调用其他构造器时候不能同时存在
  • 区分子父类中同名成员的问题
    • 默认就近原则
    • 指代父类的成员,需要通过子类调用父类成员 super.属性名
    • 如果**不存在同名问题,**当成员变量|方法,如果找到父类成员,默认省略super. ,如果找到子类成员,默认省略this.
    • 访问父类的方法: super.方法名();
public class SuperDemo08 {
    public static void main(String[] args) {
        Zi  zi =new Zi();
        zi.test();
    }
}
class Fu{
    String name;
    int age;

    public Fu(){
        System.out.println("f无参构造器");
    }
    public Fu(String name){
        this();
        this.name=name;
        System.out.println("f有参构造器");
    }
}

class Zi extends Fu{

    public Zi(){
        this("zi");
        System.out.println("z无参构造器");
    }

    public Zi(String name){
        super("fu");
        this.name=name;
        System.out.println("子类有参构造器");
    }
    public void test(){
        String name = "hahaha";
        System.out.println(name);  //就近原则
        System.out.println(this.name);  //zi  当前类中的成员
        System.out.println(super.name);  //fu  通过父类对象调用父类成员
        System.out.println(age);  //相当于省略了super.
    }
}

你可能感兴趣的:(Java,java,class,继承)