首页 > 编程语言 >六、熟知java(类和对象--引用和继承)

六、熟知java(类和对象--引用和继承)

时间:2024-08-18 17:56:23浏览次数:8  
标签:java 构造方法 -- 子类 继承 int 熟知 父类 public

熟知java(类和对象–引用和继承)

一、什么是JAVA中的引用?

引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。

二、引用和指向

new Role();

代表创建了一个Role对象,但是只是创建,并不能访问它,为了访问它,我们会使用引用来代表这个对象:

Role r = new Role;

r这个变量是Role类型,又叫做引用

=的意思指的是r这个引用指向(意思是代表)右侧创建的对象

Role 对象指向————引用 r
public class Ro {
      
    String name; //姓名
    
   String sex;//性别
	
	int age; //年龄
      
    public static void main(String[] args) {
        //创建一个对象
        new Role();
         
        //使用一个引用来指向这个对象
        Role r = new Role();
         
    }  
      
}

三、多个引用,一个对象

多个引用(r1,r2)指向一个对象(Role)。

Role 对象指向————引用 r1

Role 对象指向————引用 r2

四、什么是JAVA中的继承?

在 Java 语言中继承就是子类继承父类属性和方法,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的方法。

举个例子:动物有很多种,是一个比较大的概念。在动物的种类中,我们熟悉的有猫(Cat)、狗(Dog)等动物,它们都有动物的一般特征(比如能够吃东西,能够发出声音),不过又在细节上有区别(不同动物的吃的不同,叫声不一样)。

在 Java 语言中实现 Cat 和 Dog 等类的时候,就需要继承 Animal 这个类。继承之后 Cat、Dog 等具体动物类就是子类,Animal 类就是父类。

五、继承的作用

如果仅仅只有两三个类,每个类的属性和方法很有限的情况下确实没必要实现继承,但事情并非如此,事实上一个系统中往往有很多个类并且有着很多相似之处,比如猫和狗同属动物,或者学生和老师同属人。各个类可能又有很多个相同的属性和方法,这样的话如果每个类都重新写不仅代码显得很乱,代码工作量也很大。

这时继承的优势就出来了:可以直接使用父类的属性和方法,自己也可以有自己新的属性和方法满足拓展,父类的方法如果自己有需求更改也可以重写。这样使用继承不仅大大的减少了代码量,也使得代码结构更加清晰可见

动物类(父类)

class Animal
{
    public int id;
    public String name;
    public int age;
    public int weight;

    public Animal(int id, String name, int age, int weight) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
    //这里省略get set方法
    public void sayHello()
    {
        System.out.println("hello");
    }
    public void eat()
    {
        System.out.println("I'm eating");
    }
    public void sing()
    {
        System.out.println("sing");
    }
}

狗类(子类)

class Dog extends Animal//继承animal
{
    public Dog(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
}

猫类(子类)

class Cat extends Animal{

    public Cat(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
}

坤类(子类)

class Chicken extends Animal{

    public Chicken(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
    //鸡下蛋
    public void layEggs()
    {
        System.out.println("我是老母鸡下蛋啦,咯哒咯!咯哒咯!");
    }
}
继承分为单继承和多继承,Java 语言只支持类的单继承

单继承,一个子类只有一个父类,如我们上面讲过的 Animal 类和它的子类。单继承在类层次结构上比较清晰,但缺点是结构的丰富度有时不能满足使用需求

Java 虽然不支持多继承,但是 Java 有三种实现多继承效果的方式,分别是内部类、多层继承和实现接口。

内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,可以达到多继承的效果。

**多层继承:*子类继承父类,父类如果还继承其他的类,那么这就叫*多层继承。这样子类就会拥有所有被继承类的属性和方法。

五、JAVA中的继承的实现?

extends关键字

在 Java 中,类的继承是单一继承,也就是说一个子类只能拥有一个父类,所以extends只能继承一个类。其使用语法为:

class 子类名 extends 父类名{}

例如 Dog 类继承 Animal 类,它是这样的:

class Animal{} //定义Animal类
class Dog extends Animal{} //Dog类继承Animal类

子类继承父类后,就拥有父类的非私有的属性和方法。

测试代码:

class Animal {
    public void  sayHello()//父类的方法
    {
        System.out.println("hello,everybody");
    }
}
class Dog extends Animal//继承animal
{ }
public class test {
    public static void main(String[] args) {
       Dog dog=new Dog();
       dog.sayHello();
    }
}

四、继承的特点?

继承的主要内容就是子类继承父类,并重写父类的方法。使用子类的属性或方法时候,首先要创建一个对象,而对象通过构造方法去创建,在构造方法中我们可能会调用子父类的一些属性和方法,所以就需要提前掌握 this 和 super 关键字

创建完这个对象之后,再调用重写父类后的方法,注意重写和重载的区别

this 和 super 关键字

this 和 super 关键字是继承中非常重要的知识点,分别表示当前对象的引用和父类对象的引用,两者有很大相似又有一些区别。

this 表示当前对象,是指向自己的引用。

this.属性 // 调用成员变量,要区别成员变量和局部变量
this.() // 调用本类的某个方法
this() // 表示调用本类构造方法

super 表示父类对象,是指向父类的引用。

super.属性 // 表示父类对象中的成员变量
super.方法() // 表示父类对象中定义的方法
super() // 表示调用父类构造方法
构造方法

构造方法是一种特殊的方法,它是一个与类同名的方法。在继承中构造方法是一种比较特殊的方法(比如不能继承),所以要了解和学习在继承中构造方法的规则和要求。

继承中的构造方法有以下几点需要注意:

父类的构造方法不能被继承:

因为构造方法语法是与类同名,而继承则不更改方法名,如果子类继承父类的构造方法,那明显与构造方法的语法冲突了。比如 Father 类的构造方法名为 Father(),Son 类如果继承 Father 类的构造方法 Father(),那就和构造方法定义:构造方法与类同名冲突了,所以在子类中不能继承父类的构造方法,但子类会调用父类的构造方法。

子类的构造过程必须调用其父类的构造方法:

Java 虚拟机**构造子类对象前会先构造父类对象,父类对象构造完成之后再来构造子类特有的属性,*这被称为*内存叠加。而 Java 虚拟机构造父类对象会执行父类的构造方法,所以子类构造方法必须调用 super()即父类的构造方法。就比如一个简单的继承案例应该这么写:

class A{
    public String name;
    public A() {//无参构造
    }
    public A (String name){//有参构造
    }
}
class B extends A{
    public B() {//无参构造
       super();
    }
    public B(String name) {//有参构造
      //super();
       super(name);
    }
}

如果子类的构造方法中没有显示地调用父类构造方法,则系统默认调用父类无参数的构造方法。

标签:java,构造方法,--,子类,继承,int,熟知,父类,public
From: https://blog.csdn.net/weixin_64846176/article/details/141302940

相关文章

  • 不用再找了,国内无限制使用GPT4o的方法【亲测好用】
    都知道ChatGPT很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,无所不能~那么到底怎么使用呢?其实很简单了,国内AI产品发展也很快,很多都很好用了~我一直在用,建议收藏下来~  有最先进、最新的GPT模型,还有很多其他效率工具都是在各自领域,绝对领先地位的产品~①......
  • 黑马毕设分享《SpringBoot大学生体质测试管理系统》(源码+lw+部署文档+讲解等)
    文章目录1.前言黑马设计——专注大学生的项目实战开发,免费讲解,毕业答疑辅导黑马设计工作室简介:黑马设计是一家专注大学生的项目实战开发,免费讲解,毕业答疑辅导的工作室✅,创始人是硕士毕业于华南理工大学,工科专业,目前团队成员全职+兼职上百余人,运营线上店铺2家,与B站(IT实战,......
  • Ubuntu 中GCC交叉编译工具链安装
    ​Ubuntu自带的gcc编译器是针对X86架构的,如果要编译的是ARM架构的代码,就需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:1、它肯定是一个GCC编译器。2、这个GCC编译器是运行在X86架......
  • 手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】【
    手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】【任务1-6整合版】引言:Spring框架的ioc容器、依赖注入、BeanPostProcessor后置处理器、AOP面向切面编程等特点为我们的开发带来了极大的便利,但是我们不能只学其中的api,更要懂得Spring的底......
  • 吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【亲测好用】
    都知道ChatGPT很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,无所不能~那么到底怎么使用呢?其实很简单了,国内AI产品发展也很快,很多都很好用了~我一直在用,建议收藏下来~  有最先进、最新的GPT模型,还有很多其他效率工具都是在各自领域,绝对领先地位的产品~①......
  • 亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~
    都知道ChatGPT很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,无所不能~那么到底怎么使用呢?其实很简单了,国内AI产品发展也很快,很多都很好用了~我一直在用,建议收藏下来~  有最先进、最新的GPT模型,还有很多其他效率工具都是在各自领域,绝对领先地位的产品~①......
  • 光模块 -- 光模块类型
    eSFP光模块        eSFP(EnhancedSmallFormFactorPluggableModule):带监控功能的小型化热插拔的低速光模块。监控功能包括:监控发送和接收光功率。        SFP光模块不支持该监控功能,目前较少使用。SFP+/XFP光模块        SFP+(Enhanced8.......
  • 【项目】多设计模式下的同步&&异步日志系统(二)
    继上文对日志系统的介绍,并且实现了日志等级、日志消息的定义、以及格式化消息等。由这三个模块就能完整的输出一条消息。但是考虑到日志消息不可能全部都通过显示器展示。本项目针对落地方式,也进行多种编写,以供使用。消息落地类(简单工厂模式)消息落地的方式标准输出文件按......
  • 高并发内存池项目
    高并发内存池项目文章目录高并发内存池项目项目介绍技术栈需求浅谈池化技术内存池重新认识malloc和free第一步!设计一个定长内存池重要原理高并发内存池整体框架CurrentMemoryPool主要由三层结构组成ThreadCacheCentralCachePageCache多线程并发环境下,malloc和Conc......
  • 【项目】多设计模式下的同步&&异步日志系统(三)
    继前俩次完成了日志系统的等级类、消息结构以及格式化消息,并且将格式化的数据实现落地。落地存在同步和异步的落地方式。同步:本线程生成消息,并且进行IO写。异步:线程生成消息,交给子线程写。为此实现了双缓冲区用来减少异步带来的频繁申请锁释放锁减低效率。本文继续实现异步......