02 面向对象( 继承,抽象类)

这篇具有很好参考价值的文章主要介绍了02 面向对象( 继承,抽象类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

强调:一定用自己的话总结,避免抄文档,否则视为作业未完成。

this关键字的作用

为了解决成员变量和局部变量所存在的二义性,适用于有参构造时使用

示例

private String name;
    private int age;
    public person(){}
    public person(String name,int age){
        this.name =name;//不使用this关键字的话,他的值就是默认值
        this.age =age;
    }
为成员变量设置值, 构造器和setter方法的选择,为什么?

构造器:在知道具体的参数的时候可以使用,可以创建对象并做初始化,只能使用一次

setter方法:在不知道有具体参数的时候使用,在创建对象后再使用getter方法进行调用,可以多次使用

示例:

public class person {
    private String name;
    private int age;
    public person(){}//无参构造器,添加有参构造器时必须写
    public person(String name,int age){//有参构造器
        this.name =name;
        this.age =age;
    }
    
//getter和setter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public void p(){
        System.out.println("名字:"+name+",年龄:"+age);
    }
为什么需要继承?

解决多个类中存在有相同的字段和方法的重复问题

Java中的继承语法

继承时候使用extends关键字

public class 父类名{
    //父类,可以编写多个不同类中相同的字段名
    // 存放多个子类共同的字段和方法
}

public class 子类名 extends 父类名{
    // 存放自己特有的(独有的)字段和方法
}
子类能从父类中继承到哪些成员?

1.public修饰的成员都可以被子类继承
2.private 修饰的成员子类不能继承

3.protected修饰的成员所有的子类都可以继承,专门提供给子类使用

4.默认的关键字只能是在同包下面可以被子类继承

5.有参构造器和无参构造器不能被继承

注意:java只支持单继承,也支持多重继承,不支持多继承

继承有一个根类:Objiect

子类什么时候需要覆盖父类中的方法,方法重写?(override)

在子类中添加一个 和父类一模一样的方法

//执行顺序:
//1. 先找自己是否有对应的方法,没有就找父类的
//2.找父类中是否存在该方法,如果有就执行,否则继续找
//3.知道找到objiect类,如果也没有就报错
方法覆盖的规则

private修饰的方法不能被子类所继承

  1. 实例方法签名必须相同 (方法签名= 方法名 + 方法的参数列表)
  2. 子类方法的返回值类型是和父类方法的返回类型相同或者是其子类
  3. 子类方法的访问权限比父类方法访问权限更大或相等
    • 如果父类方法是private,子类方法不能重写。==> 重写建立在继承的基础上,没有继承,就不能重写。
super关键字的作用

在子类中的父类方法被覆盖了,但任然需要父类中方法的东西就需要使用super关键字

示例

public class Ostrich extends Bird {

    public void fly() {
        System.out.println("自由奔跑");
    }

    //在子类中,如何调用父类中的方法
    public void doWork(){
        fly();//调用自己的fly方法

        //直接调用父类中的方法
        //super指向父类对象,只能找到直接父类
        super.fly();
    }
什么时候需要把父类中的方法定义成抽象方法?

子类必须要覆盖父类中的某一个方法的时候

使用abstract修饰的方法,称为抽象方法。 0

public abstract 返回类型 方法名(参数);

抽象方法的特点:

  • 使用abstract修饰,没有方法体,留给子类去覆盖

  • 抽象方法必须定义在抽象类或接口中

使用abstract修饰的类,成为抽象类。/

public abstract class 类名{
    
}
抽象类应该怎么使用?可以直接使用抽象类创建对象吗?

1.抽象类不可以创建对象,语法不支持

2.抽象类中可以同时拥有抽象方法和普通方法

3.抽象类必须要有子类,并且子类必须覆盖父类的抽象方法,否则该抽象类没有意义,或者子类也是抽象类(可以不覆盖)

抽象类的意义是什么?

必须要有子类来进行继承,子类必须覆盖父类的抽象方法,除非子类也是一个抽象类就不用覆盖

Objiect中的equals和toString关键字
1.equals:

示例:

public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
//重写父类中的equals
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;//地址相同就是同一个对象
        //o为null或者两个对象的类型不同,则不是同一个对象
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        //若果年龄相同并且姓名的值相同则表示同一个对象
        return age == student.age && Objects.equals(name, student.name);
    }
    //省略setter方法

public static void main(String[] args) {
        Student s1=new Student("国辉",23);
        Student s2=new Student("国辉",23);
        //==,基本数据类型比较值,引用类型比较值
        System.out.println(s1 == s2);//false
        //objiect类中的eqauls方法比较两个对象的地址,作用和"=="相同


        //在Student类中重写equals方法之后,此时比较两个对象的值是否相同
        System.out.println(s1.equals(s2));//true

    }
2.toString

示例:

public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //重写toString

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //省略setter方法

 public static void main(String[] args) {
        Student s1=new Student("国辉",23);
        //cn.wolfcode._07_objiect.Student:全限定名
        //@157f12c:地址
        //objiect类中的toString:
        //重写objiect的toString方法,打印对象的字段值
        System.out.println(s1.toString());//不具有打印功能,只做字符串转换
        System.out.println(s1);

    }

文章来源地址https://www.toymoban.com/news/detail-457511.html

到了这里,关于02 面向对象( 继承,抽象类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面向对象——多态、抽象类、接口

    学习资料来自:黑马程序员,内容仅为学习记录,侵删 多态 多态:事务存在的多种形态 多态的前提:1、有继承关系;2、重写父类方法;3、父类引用指向子类对象 面向对象 面向对象多态中成员访问特点 1.成员方法(动态绑定):编译看左边(父类),运行看右边(子类)

    2024年02月08日
    浏览(87)
  • 面向对象详解,面向对象的三大特征:封装、继承、多态

    一、面向对象与面向过程 面向对象编程 (Object-Oriented Programming,简称OOP)和 面向过程编程 (Procedural Programming,简称PP)是两种不同的 编程范式 。 面向对象编程强调把问题分解成对象,通过封装、继承和多态等机制,来处理对象之间的关系 。每个对象都可以独立地处理自

    2024年02月21日
    浏览(52)
  • 黑马程序员——javase进阶——day01——匿名对象 , 继承 , 抽象类

    目录: 面向对象回顾 面向对象的核心思想是什么? 现有的类还是先有的对象? Java类的创建? 类中的组成成分? 创建对象所使用的? 创建对象的格式? 调用对象的成员? 定义构造方法的格式? 定义构造方法的特点? 构造方法的作用? 面向对象三大特征是什么? 封装的思想及其作

    2024年01月24日
    浏览(40)
  • Java面向对象之抽象类、类、接口分析参考

    Java 抽象类 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用; Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口 1. 抽象方法: 用Abstract 声明抽象方法,只包含一个方法名,没有方法体。方法名后面直接跟一

    2024年02月10日
    浏览(43)
  • Java面向对象继承

    目录 继承的概念 继承的作用 继承 extends implements super 与 this 继承类型 类的继承格式 继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也可以添加自己

    2023年04月13日
    浏览(34)
  • 【C++面向对象】8. 继承

    继承允许我们依据一个类来定义另一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了 重用代码功能 和 提高执行时间 的效果。 当创建一个类时,我们不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已

    2024年02月08日
    浏览(52)
  • C++ 面向对象(2)——继承

    面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类

    2024年02月10日
    浏览(45)
  • python 面向对象之继承

    前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大家分享面向对象的三大特性之一:继承。 继承具有以下特性: 代码重用:继承允许我们创建一个新的类,并从一个或多个现有的类中继承属性和方法。这使得我们可以避免重复编写相同的代码,提高代码的重

    2024年02月15日
    浏览(50)
  • 面向对象编程:深入理解抽象类和关键字

    在Java编程中,我们经常会遇到一些特殊的和概念,其中包括static、final以及抽象类等。本文将深入探讨这些和概念的作用和使用方法,并通过一个实例展示抽象类的应用。 1. 1.1 static static修饰成员变量:表示该成员变量属于类,不属于对象,所有对象共享

    2024年02月15日
    浏览(52)
  • C++:面向对象大坑:菱形继承

    单继承:一个子类只有 一个直接父类 时称这个继承关系为单继承。 图示: 多继承:一个子类有 两个或以上直接父类 时称这个继承关系为多继承。 图示: 1.概念 菱形继承:菱形继承是多继承的一种特殊情况。即:一个类是另外几个类的子类,而这几个子类又是另外一个类

    2024年04月27日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包