Java基础_继承&抽象类(this super)

一、标准类的制作(JavaBean):

  1. 将属性私有化
  2. 提供get和set方法
  3. 提供空参【必须提供】和有参数【选择性提供】的构造方法

注意:构造函数 提供了有参构造后 手动提供无参构造(参数构造不提供时、默认提供无参构造)

public class Student {
    // 成员变量
    String name;
    int age;

    // 构造方法
    // 提供空参数构造方法 保证使用最通用的方式也能创建对象
    public Student(){}

    public Student(String name){
        this.name = name;
    }
    public Student(int age){
        this.age = age;
    }
    // 提供有参构造,目的是在创建对象的时候可以直接给属性赋值
    public Student(String name, int age){
        this.name = name;
        this.age=age;
    }


    // get set 方法
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name=name;
    }

    public int getAge(){
        return this.age;
    }
    public void setAge(int age){
        this.age=age;
    }


    // 成员方法
    public void study(){
        System.out.println("努力学习");
    }

    public void say(){
        System.out.println("学生在说话");
    }

    public void show(){
        System.out.println("姓名:"+this.name+",年龄"+this.age);
    }
}

 

二、继承

java中继承的特点:

  1. java只能单继承 ;  一个类只能有一个父类
  2. java支持多级(层)继承;  父类也可以有父类     所有类都会继承Object
  3. java中一个父类可以有多个子类; 

继承的好处:描述了事物之间的所属关系,继承的好处是提高代码的复用性  如下

讲师类:    属性(姓名、年龄、工号),方法(讲师)

班主任类:属性(姓名、年龄、工号),方法(管理班级)

员工类:    属性(姓名、年龄、工号)

观察三者之间的关系:讲师+班主任(派生类) 两类继承员工类 (父类)

将子类的共性向上抽取,抽取到父类;父类拥有所有子类的共性内容,子类除了拥有共性内容外还有自己特有的内容

派生类继承父类自动拥有父类的所有成员【私有成员也能继承、但是不能直接访问】

重写 & 重载

重载 overload:在一个类中方法名字相同、参数列表不同(参数个数&参数类型&多类型参数的顺序)

重写 override:继承中子类和父类出现相同的方法,注解 @override  如 方法名称&参数列表@返回值 完全相同  (意义:父类方法不能满足子类的需求,在子类中对方法进行增强)

重写 注意:

  1. 子类重写父类方法时,参数列表必须相同
  2. 子类重写父类方法时,子类的权限一定要大于等于父类的权限 : 子类 public > protected > (default) > private 父类 default权限修饰符省略不写
  3. 私有方法不能被重写

继承中构造方法注意事项

  1. 构造方法不能继承(子类不会继承父类的构造方法)
  2. 创建子类对象时,会先执行父类的构造方法、然后执行子类的构造方法。原因是在子类的构造函数中隐藏着super() 、这个super() 是在调用父类的空参构造方法;
  3. 我们也可以使用super关键字,手动调用父类的构造方法 super(参数)
  4. 如果使用super() 调用构造方法,那么必须在构造函数的第一行,所以不能在一个构造函数中调用两次super

三、this & super

super的三种用途

  1. 访问父类的成员变量  super.成员变量
  2. 访问父类的成员方法  super.成员方法
  3. 访问父类的构造方法  super()  子类中的空参数构造会隐藏调用父类空参构造  super()  注意 super调用构造方法只能放在第一行 (this、super不能同时出现)

this的三种用途

  1. 访问本类的成员变量  this.age     
  2. 访问本类的成员方法   this.show()   如果本类没有 不会报错则向父类寻找
  3. 访问本类的构造方法   this(参数)        注意 this调用构造方法只能放在第一行,手动有了this  系统则不会提供super方法,(this、super不能同时出现)子类中的构造方法中至少有一个构造方法是有super() 隐藏构造,肯定会先执行父类的构造方法 
  • 构造方法访问成员方法是没有顺序要求的
  • this super

四、抽象类

抽象类:如果一个方法中的方法体,说不清道不明的就是抽象  abstract  ,抽象方法存在的类必须是一个抽象类,抽象类用abstract修饰类

抽象类格式:

  • public abstract class 类名{}  
  • public abstract 返回值类型 方法名(参数)    没有方法体

抽象类注意事项:

  1. 抽象类不能创建对象;
  2. 抽象类中可以有构造方法,抽象类中的构造方法是给子类使用的,创建子类对象时会执行父类的构造方法,;
  3. 抽象类中可有 普通方法 + 抽象方法,抽象方法所在的类必须是抽象类(必要不充分)
  4. 一个普通类在继承了抽象类之后,必须重写抽象方法(抽象类中的抽象方法  子类必须去重写@override),一个抽象类去继承抽象类可以不重写
  5. 抽象类的目的是为了让子类继承,体现的是模板思想
// 动物抽象类
public abstract class Animal {
    public abstract void eat();// 抽象方法 子类必须重写 起到一定的限制作用
}

// 猫类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

// 狗类
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

// 测试代码
public class AnimalTest {
    public static void main(String[] args) {
        Dog dog = new Dog();  // 对象
        dog.eat();
        Cat cat = new Cat();  // 对象
        cat.eat();
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值