零基础学java---一篇文章带你了解无限套娃的继承

简介: 零基础学java---一篇文章带你了解无限套娃的继承

1.继承






1.1 继承概述


继承是面对对象的三的特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法


继承格式


格式:public class 子类名 extend 父类名 { }

范例: public class Zi extend Fu { }

Fu: 是父类,也称为基类,超类

Zi: 是子类,也称为派生类

继承中的特点


子类可以有父类的内容

子类也可以有自己的内容

代码示例:


public class Fu {
    public void show(){
        System.out.println("show方法被调用");
    }
}


public class Zi extends Fu{
    public void method(){
        System.out.println("method方法被调用");
    }
}


/*
       测试类
 */
public class Demo {
    public static void main(String[] args) {
        Fu f= new Fu();
        f.show();
        Zi z =new Zi();
        z.method();
        z.show();
    }
}


控制台输出结果



1.2继承的好处和弊端


继承的好处


提高了代码的复用性(多个类相同的成员可以放到同一个类中)

提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

继承的弊端


继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

什么时候使用继承?


继承的关系:is a(什么是什么的一种)

假设法:我们有两个类A和B如果满足A是B的一种,或B是A的一种,就说明他们存在继承关系,这个时候就可以考虑继承,否则就不能滥用继承

举例:香蕉和水果,狗和动物,


1.3继承中的访问特点


在子类方法中访问一个变量


子类局部范围找

子类成员范围找

父类成员范围找

如果都没有就报错(不考虑父类的父类…)


1.4 super关键字


super关键字的用法和this关键字的用法相似


this:代表本类对象的引用(this关键字指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说this代表本类对象的引用)

super:代表父类储存空间的标识(可以理解为父类对象引用)



代码示例:


public class Fu {
   public int age = 20;
}


public class Zi extends Fu{
    public int age =25;
  public void show(){
      int age = 30;
      System.out.println(age);
      //访问本类的成员变量age(this 方法)
      System.out.println(this.age);
      //访问父类的成员变量age(super方法)
      System.out.println(super.age);
  }
}


/*
       测试类
 */
public class Demo {
    public static void main(String[] args) {
     Zi z = new Zi();
     z.show();
    }
}


控制台输出:




1.5 继承中构造方法的访问特点


子类中所有的构造方法默认都会访问父类中无参的构造方法为什么呢?


因为子类会继承父类中的数据,可能还会使用父类的数据。

所以,子类初始化之前,一定要先完成父类数据的初始化

每一个子类构造方法的第一条语句默认都是:super()

如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?


通过使用super关键字去显示的调用父类的带参构造方法

在父类中自己提供一个无参构造方法

推荐:自己给出无参构造方法


继承中成员方法的访问特点


在子类对象中访问一个方法


子类成员范围找

父类成员范围找

如果都没有就报错(不考虑父类的父类…)

方法调用过程











1.8 方法重写


方法重写概述


子类中出现和父类中一模一样的方法声明

方法重写的应用

当子类需要父类的功能,而功能主体子类有自己内容时,可以重写父类中的方法,这样,及沿袭了父类的功能,有定义了子类的特有内容

@Override


是一个注解

可以帮助我们检查冲级方法的方法声明的正确性

代码示例:


/*
      手机类
 */
public class Phone {
    public void call(String name){
        System.out.println("给"+name+"打电话");
    }
}


public class NewPhone extends Phone{
    public void call(String name){
        System.out.println("开启视频功能");
        //System.out.println("给"+name+"打电话");
        super.call(name);
    }
}


/*
    测试类
 */
public class PhoneDemo {
    public static void main(String[] args) {
        Phone p =new Phone();
        NewPhone np= new NewPhone();
        np.call("hmm");
        System.out.println("------------------------");
        p.call("hmm");
    }
}


1.9 方法重写注意事项


私有方法不能被重写(父类私有方法子类是不能继承的)

子类方法访问权限不能更低(public>默认>私有)


1.10 java中继承的注意事项


Java中类只支持单继承,不支持多继承

Java中支持多层继承(无线套娃)

目录
相关文章
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
55 3
|
18天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
55 1
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
23 3
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
66 4
|
2月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
41 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
34 2
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
38 1
|
2月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
42 2
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
26 5
|
2月前
|
Java
java继承和多态详解
java继承和多态详解
47 5