Java学习Day02------继承

继承

1、格式:

class 子类名 extends 父类名 { }

2、特点:

(1)Java只支持单继承
(2)java中支持多层继承

3、访问权限规则

public>protected>默认>private
(1)public任意访问
(2)protected同个包下任意访问,不同包下子类可以访问
(3)默认权限只能在同一包下任意访问
(4)private只能在当前类访问

4、继承的好处

(1)提高了代码的复用性 (多个类相同的成员可以放到同一个类中)
(2)提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

5、继承的弊端

  类与类之间产生了 关系,类的耦合性增强,如果父类发生了改变,子类实现也就会随之发生变化

6、应用场景

  类与类之间存在is…A关系(比如:猫和狗是动物的一种)

7、方法重写注意事项

(1)父类中私有的东西不能被重写
(2)父类中静态方法不能被子类重写
(3)子类重写时,访问权限必须大于等于父类

8、初始化顺序

  子类初始化的时候后一定先初始化父类

9、继承规则

  在继承关系中可以继承成员变量和成员方法,但是不能继承构造函数。子类初始化的时候一定要先初始化父类,在每个子类构造函数的 第一条语句添加super(…)(必须是第一条语句)

super关键字

1、this&super
  this:代表当前对象的而引用
  super:代表父类存储空间的标识
2、this&super访问成员变量
  this.成员变量:访问本类成员变量
  super.成员变量:访问父类成员变量
3、this&super访问成员方法
  this.成员方法:访问本类成员方法
  super.成员方法:访问父类成员方法
4、构造方法
  this(…):访问本类构造方法
  super(…):访问父类构造方法

抽象类

1、特点:

  (1)抽象类和抽象方法必须使用abstract关键字修饰
  (2)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
  (3)抽象类无法实例化
  (4)抽象类可以有构造方法并不服务于抽象类创造对象,抽象类无法创造对象,他的作用只是为了帮助实现类创造对象)
  (5)抽象类的子类要么重写抽象类中的所有抽象方法,要么自己本身就是抽象类

2、应用场景

  在抽取子类共性 时,有些方法是在父类中没有具体实现的,也就是说某些方法,不同的子类会有不同的实现,无法固定代码。

3、案例

  案例需求
    定义猫类(Cat)和狗类(Dog)
    猫类成员方法:eat(猫吃鱼)drink(喝水…)
    狗类成员方法:eat(狗吃肉)drink(喝水…)
  实现步骤
    1. 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
    2. 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
    3. 抽象方法需要存活在抽象类中,将Animal定义为抽象类
    4. 让 Cat 和 Dog 分别继承 Animal,重写eat方法
    5. 测试类中创建 Cat 和 Dog 对象,调用方法测试
  代码实现

- 动物类
  public abstract class Animal {
      public void drink(){
          System.out.println("喝水");
      }
      public 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 static void main(String[] args) {
          Dog d = new Dog();
          d.eat();
          d.drink();
          Cat c = new Cat();
          c.drink();
          c.eat();
          //Animal a = new Animal();
          //a.eat();
      }

final关键字

1、可以修饰方法、变量、类
2、特点:
  (1)被final修饰的方法不能被子类重写
  (2)被final修饰的变量在第一次赋值之后就不能被赋值了,就变成了一个常量(常量命名:如果是一个单词就所有字母大写,如果是多个单词,仍然是所有字母大写,但是单词之间添加下划线)
    (final修饰基本数据类型时,代表的是其值不能更改,修饰引用变量时,代表的是其引用的地址值不能更改,但是对象的属性值可以更改)
    (final修饰成员变量的时候,要注意初始化时机,第一个就是在变量创建的时候给值,第二个就是在构造函数结束之前进行赋值)
  (3)被final修饰的类就不能被继承了 ,也就是不能有子类

代码块

1、局部代码块
  在方法中定义,限定变量生命周期
2、构造代码块
  在类中方法外定义,每次构造方法执行的时候都会执行一次该代码,并且会在构造方法之前执行。作用:将多个构造方法中相同的代码抽取到构造代码块中,提高代码复用率
3、静态代码块
  在类中方法外定义,使用static关键字进行修饰,随着类的加载而加载,并且只会执行一次。作用:在类加载的时候进行一些数据初始化的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值