Java继承

一、继承的概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
子类在具有父类的一般特性也会具有自身的特性。
下图就是动物类的继承

动物
食草动物
食肉动物
兔子
...
狮子
老虎
...

1、继承的格式

class 父类{
}
class 子类 extends 父类{
}

2、为什么需要继承

当我们写一个项目时,会遇到几个不同的类,他们类里的一些方法以及变量会出现重复。这样导致的后果就是代码量臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多代码,容易出现错误)。因此为了解决这个问题,我们提出了继承,将这些类中相同的部分提取出来组成一个父类。

接下来我们举一个例子来说明一下不使用父类时代码块的重复

//Dog 类,属性(姓名,id),方法(吃,睡,自我介绍
public class Dog{
   private String name;
   private int id;
   public Dod(){
   }
   public Dog(String name,int id){
       this.name=name;
       this.id=id;
   }
   public void eat(){
       System.out.println(name+"吃饭饭");
   }
   public void sleep(){
       System.out.println(name+"睡觉觉")
   }
   public void introduction(){
       System.out.println("我是"+id+"我的名字是"+name);
   }
}

//Cat 类,属性(姓名,id),方法(吃,睡,自我介绍
public class Cat{
   private String name;
   private int id;
   public Cat(){
   }
   public Cat(String name,int id){
       this.name=name;
       this.id=id;
   }
   public void eat(){
       System.out.println(name+"吃饭饭");
   }
   public void sleep(){
       System.out.println(name+"睡觉觉")
   }
   public void introduction(){
       System.out.println("我是"+id+"我的名字是"+name);
   }
}

相信大家已经看出来代码存在大量重复了吧(虽然是刻意写出来的重复,但是在实际项目中也会遇到,哈哈哈)
那么接下来我们提取上边两个类相同的部分组成一个父类

//Animal 父类
public class Animal{
   private String name;
   private int id;
   public Animal(){
   }
   public Animal(String name,int id){
       this.name=name;
       this.id=id;
   }
   public void eat(){
       System.out.println(name+"吃饭饭");
   }
   public void sleep(){
       System.out.println(name+"睡觉觉")
   }
   public void introduction(){
       System.out.println("我是"+id+"我的名字是"+name);
   }
}
//Dog 类
public class Dog extends Animal{
    public Dog(String name,int id){
        super(name,id);
    }
}
//Cat 类
public class Cat extends Animal{
    public Cat(String name,int id){
        super(name,id);
    }
}

3、继承类型

Java不支持多继承,但支持多重继承
单继承:class B ----> class A
多重继承:class C ----> class B ----> class A
不同类继承同一个类:class B ----> class A || class C ----> class A

4、继承的特性

子类拥有父类非 private 的属性和方法
子类可以拥有自己的属性和方法,即子类对父类的扩展
子类可以用自己的方式实现父类的方法
Java 的继承是单继承,但是可以多重继承
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性差)

5、继承关键字

继承可以使用 extends 和 implements 这两个关键字来实现继承,所有的类都是继承于java.lang.Object,当一个类没有继承的两个关键字,则默认继承 Object(这个类在java.lang包中,所以不需要import)。
首先来看 extends 关键字:单一继承

public class Animal{  
}
public class Dog extends Animal{
}

implements 关键字:类继承接口,可以同时继承多个接口(变相使 Java具有多继承的特性)

//定义接口 A
public interface A{
    public void play(){
    }
    public void eat(){
    }
}
//定义接口 B
public interface B{
    public void palygame(){
    }
}
//继承接口 A B
public class C implements A,B{
}

二、super和this 关键字

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

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

输出为:
animal : eat
dog : eat
animal : eat

三、final 关键字

final 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(类方法和对象方法)和类
使用 final 关键字声明类,则此类不能被继承;用来修饰方法,此方法不能被子类重写
声明类:final class 类名{ }
声明方法:修饰符 final 返回值类型 方法名(){ }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cw旧巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值