【Java基础篇】第十二章 继承

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 【Java基础篇】第十二章 继承,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

⭐⭐⭐Java基础篇目录⭐⭐⭐


🍁 第一章 Java开发环境搭建
🍁 第二章 标识符与关键字
🍁 第三章 变量
🍁 第四章 数据类型
🍁 第五章 运算符
🍁 第六章 控制语句
🍁 第七章 方法
🍁 第八章 认识面向对象
🍁 第九章 对象的创建和使用
🍁 第十章 封装
🍁 第十一章 this和static
🍁 第十二章 继承
🍁 第十三章 方法的覆盖和多态
🍁 第十四章 super

在这里插入图片描述

😉

1、继承

继承(Inheritance),关键字extend。可继承父类除构造方法以外的代码,私有的也可以继承,只是在子类中无法直接访问。继承可以解决代码的臃肿,提高了代码的复用性。

继承的作用:

  • 基本作用:
    子类继承父类,代码可以得到复用
  • 主要作用:
    因为有了继承关系,才有了后期的方法覆盖和多态机制。

2、继承的特性

  • B类继承A类,则A类称父类、基类、超类,B类称子类、派生类、扩展类
class A{
}

class B extends A{
}
  • java中只支持单继承、不支持多继承(C++支持多继承),即不允许一子多父,但可以一父多子
//不允许的
class B extends A,C{
}

//不能一子多父,但可以有父、有爷爷
class X{
}
class Y extends X{
}
//Z直接继承了Y,间接继承了X
class Z extends Y{
}
  • Java中规定,除构造方法不能继承之外,剩下的都可继承,但私有属性无法在子类中直接访问,只能间接,如get
  • Java中没有显示继承任何类,则默认继承Object类,Object类是Java中的根类(老祖宗类),即一个对象与生俱来就有Object类型中的所有特征
……/jdk18/lib/src/java.base/java/lang/Object.java

class X{
}
等价于
class X extends Object{
}
//Object类是所有类的父类
  • 继承也会存在一些缺点,如CreditAccount类继承了Account类会导致他们之间的耦合度非常高,Account类发生改变会立马影响到CreditAccount类

在这里插入图片描述
在这里插入图片描述

3、继承的理解

子类继承父类,可以理解成是将父类中的代码隐形copy一份到子类体中,形象的比喻就是儿子从他父亲那里继承了100W,这100W爱咋花咋花。

class Animal{
    //赋予name属性一个默认值
    String name = "tiger";
    public void move(){
        System.out.println(name+"正在移动");
    }
}

/**
 * 子类
 */
class Cat extends Animal{

}
public class ExtendsTest {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.move();
    }
    
}

运行结果:
在这里插入图片描述

在这里插入图片描述
😉

什么时候使用继承?
凡是采用" is a "能描述的,都可以用继承,如Cat is a Animal,Creditaccount is a Account.

4、Object类

Java内置了一套庞大的类库,我们可以在此基础上进行二次开发,此内置的库实现了很多功能,如string是SUN编写的字符串类,System是SUN编写的系统类……

关于System.out.println();的理解

System是类名,out后无小括号,推测是变量
--->
能类名.,说明out变量是静态变量
--->
System.out返回了一个对象,这个对象调用了println()方法

这里涉及静态变量与new 对象的第一次组合,不奇怪,反正就存个对象的地址,是个变量就好。int i=100;和static int i =100;存变量i,无非是存储位置的不同、

public class SystemTest {
    static Student stu = new Student();

    public static void main(String[] args) {
        //类名.静态变量返回一个对象(引用)
        //可以理解成Student s = SystemTest.stu;再s.exam();
        SystemTest.stu.exam();

    }
}
class Student{
    public void exam(){
        System.out.println("exam");
    }
}

在这里插入图片描述

在这里插入图片描述
😉
在这里插入图片描述
查看Java中JDK下的源码时,当一个方法以;结尾,并且修饰符列表中有native关键字,表示其底层调用了C++写的dll程序(dll即动态链接库文件)

toString方法源码

public String toString(){
	return getClass().getName()+"@"+Integer.toHexString(hashcode());
}
toString的简单测试

public class Test1 {
    public static void main(String[] args) {
        Test1 t = new Test1();
        System.out.println(t.toString());
        System.out.println(t);
    }
}

运行结果:
在这里插入图片描述

@后面的字符串,可等同看作时对象在堆内存中的内存地址,实际上是内存地址经过哈希算法得出的十六进制结果。
在这里插入图片描述
😉
在这里插入图片描述
直接输出一个引用的时候,println()方法会自动调用引用的toString()方法,然后输出toString()方法的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146121.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!