java中的继承

1.继承概念

在这里插入图片描述

实现代码复用 子类必须要添加一些新的内容,必须要体现出父类的不同 体现程序中分层设计—反映出事物由简单到复杂的认知
优点:重复的方法不需要自己来实现,直接从父类中继承子类继承
父类的行为和特征,使得子类具有和父类相同的实例域和方法。

2.Java中继承的语法格式

必须要有父类
修饰符 class类名称 extends 父类{。。。。。}

public class zi extends fu{
.......
}

注意:子类将父类除构造方法外所有内容都继承到子类当中

3.在子类中访问继承体系中的成员

访问成员变量
1. 子类与父类没有同名成员变量—优先访问自己,如果自己没有,再去父类中找
2. 在子类方法中 访问成员变量----优先访问自己的,如果没有,去父类中找
注意:在子类方法中,无法直接去访问父类中相同名称的成员变量 super(在子类中访问父类的成员)

4.继承对象中,子类对象构造

创建哪个类的对象,就会调用哪个类的构造函数 :1.子类对象是如何构造 2.子类的构造函数该如何写
1解释:父类如果没显示定义任何构造方法,此时编译器会为父类生成一份无参默认的构造方法,此时子类可以根据自己是否需要来选择实现
2解释:父类如果显示提供无参的构造方法。子类可以根据自己是否需要来选择实现----如果用户没有显示提供,则编译器会给子类生成一个默认构造方法
3.如果父类显示提供了带有参数的构造方法,则此时子类必须要显示提供构造方法----因为子类必须要在构造方法中通过super调用基类的构造方法完成子类对象中从基类继承下来的成员的构造
请添加图片描述

注意:
1.super必须是构造方法中的第一条语句
2. super 和this不能同时在构造方法中存在
(原因一:必须要为第一条语句
原因二:导致子类对象从父类继承下来的成员构造了多次)

  public class Zi extends Fu{
  int  d;
  public Zi(){
  super(10,20);
  d = 30;
  System.out.println("Zi()");
}
public static void main(String[] args){
Zi zi= new Zi();
}
}

在继承体系中,子类和父类的对象事is-a关系
===子类对象是父类对象,反过来不可以

5.this 和 super

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。

this和super都没有包含在对象中
super:只在代码中可以体现出来,告诉编译器访问基类的成员,但是实际在底层:但是没有super

 public class Fu{
  public Fu(){
   System.out.println("我是父类构造方法");
   }
   {
   System.out.println("我是父类实例代码块");
   }
   static{
   System.out.println("我是父类静态代码块");
   }
   }


public class Zi extends Fu{
 public Zi(){
   System.out.println("我是子类构造方法");
   }
   {
   System.out.println("我是子类实例代码块");
   }
   {
   System.out.println("我是子类静态代码块");
   }

   public asttic void main(String[] args){
   Zi zi = new Zi();
   System.put.println("=========");
   Zi z2 = new Zi();
   }
   }
   
//运行结果
// 打印顺序:打印顺序:父类静态 --> 子类静态-->父类实例 -->父类构造器  -->子类非实例 -->子类构造器

super 和 this调用的区别

class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}
 
class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}
 
public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eatTest();
  }
}
//运行结果:
//animal : eat
//dog : eat
//animal : eat

在类加载过程中一定先加载父类,在加载子类

6.访问权限

方法一般给的都会public
成员变量:一般设置为private或protected
private:修饰的成员不能在类外被访问,也不能被子类访问
protected:修饰的成员不能在类外被访问,可以被子类访问

7.继承方式

7.1单继承

一个类只能有一个父类
在这里插入图片描述

7.2多层继承

在这里插入图片描述

注意:Java不支持多重继承{一个类可以继承多个父类)
一般继承层次不会超过三层

8 . final关键字

//声明类:
final class 类名 {//类体}
//声明方法:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:

 public asttic void main(String[] args){
 int a = 10;
 a=20;  //可以改变a的赋值
final int b = 30;
//  b=20   会报错 b被final修饰,认为b是一个常量。常量不能被修改

//注意:final在此处修饰的是array,表明该引用不能再去引用其他的数组
final int[] array = new int[0];
array = new int[20];//此处会报错
array[0] = 100;

注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final

final修饰类,表明这个类不能继承

9.继承的特性

1.子类拥有父类非 private 的属性、方法。

2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

3.子类可以用自己的方式实现父类的方法。

4.Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值