首页 > 其他分享 >面向对象 续

面向对象 续

时间:2023-02-18 17:45:14浏览次数:28  
标签:继承 子类 面向对象 Student 父类 方法 属性

//类的格式声明
//格式
[修饰符] class 类名{
    //属性列表
    //构造器列表
    //get/set方法
    //其他方法
}

如何创建对象

new 类名();    用无参构造

new 类名(参数);   用有参构造

匿名对象和有名对象:

Student stu = new Student(): stu对象名,也可以称为对象的引用

匿名对象: System.out.println(new Student());

对象内存图:

 

 面向对象基本特征

封装

封装的作用:安全  使用方便  对使用者屏蔽实现细节

概念:

        狭义:

                属性的封装

                       (1)属性私有化:private

                       (2)提供公共get/set方法

        广义:方法 类 包  组件  系统 

继承

什么情况下需要继承?继承的好处是什么?

为了代码重用

(1)当有一个父类,如果再声明类时,发现这些类与已经存在的父类有很多相同特征,那么就可以通过继承的方式来简化代码

(2)已经很多类,发现这些类有很多共同的特点,那么我们可以把这些共同的特点抽取到一个父类中,以便简化代码

逻辑角度

  表示is-a的关系

如何继承

语法格式:
[修饰符] class  子类名  extends  父类名{
}

继承后对几个成员的影响

   属性

(1)子类继承父类时,一定会继承父类的所有的属性,包括私有的,但是由于私有的关键字private的原因,在子类中无法直接操作它,但是可以通过get/set方式操作它

(2)当子类的属性与父类的属性重名时,而且父类的属性没有私有化,如果要访问父类的属性那么通过super.属性进行访问,如果子类中没有通过super.属性访问,那这个属性就表示是子类自己的

//面试题
package com.atguigu.review;
public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        System.out.println(stu.getInfo());//结果?  年龄:10
        System.out.println(stu.getAge());//结果?20   如果子类重写,答案是10
    }
}
class Person{
    int age = 20;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}
class Student extends Person{
    int age = 10;
    /*public int getAge(){
        return age;
    }*/
    public String getInfo(){
        return "年龄:" + age;
    }
}

   方法

(1)子类继承父类时,一定会继承父类的所有的方法,包括私有的,但是由于private,在子类中无法直接操作,但是可以间接操作

(2)当父类的方法实现不适用于子类时,子类可以对父类的方法的进行重写

   构造器

(1)子类继承父类时,不会继承父类的构造器

(2)子类继承父类时,一定会调用父类的构造器 

           如果父类有无参构造,那么子类会默认去调用父类的无参构造
           如果父类没有无参构造,只有有参构造,那么子类必须在子类构造器中手动调用父类的有参构造

          调用父类的无参构造的语句:super();
          调用父类的有参构造的语句:super(实参列表);
          而且这两个语句必须在子类的构造器的首行。

继承的原则:

(1)单继承

         在Java中只支持单继承,也就是说一个类只能有一个直接父类     --》一个唯一的亲生父亲

(2)多层继承

        在Java中父类还可以有父类,而且在子类中会继承父类以及父类的父类的所有的属性与方法 --》代代相传

              子类对象在寻找一个方法、属性时,如果本类中找不到,会去直接父类中查找,如果直接父类中也找不到,在往上找,找到为止,一直追溯到java.lang.Object根父类中

              通过super.属性和方法时,先从直接父类中查找,如果没有,再往上找,直到找到为止,一直可以到java.lang.Object

(3)一个类可以有很多个子类,子类还可以有子类

        子孙满堂      开枝散叶

多态

多态的表现形式

(1)方法的重载:同一个类中,功能多种实现形式
         方法的重写:父子类中,功能的不同实现形式

(2)对象的多态性

        编译时类型与运行时的类型不一致,编译时看“左边”,运行时看“右边”,
        编译时从“父类”中寻找方法,运行时执行的是“子类”重写过的代码

               对象的多态性的前提:
                   (1)继承
                   (2)方法的重写
                   (3)多态引用

                            多态引用

                                 Person p = new Student();

                             本态引用

                                  Person p = new Person();

                                  Student s = new Student();

多态的应用: (1)多态参数  (2)多态数组

类型转换:

      向上转型

          子类的对象赋值给父类的变量   自动完成

      向下转型

          把父类的变量赋值给子类的变量

          强制类型转换

          想要向下转型成功    父类的变量本身指向的就是该子类的对象

          如何避免ClassCastException

//在向下转型之前,加判断
if(变量  instanceof  子类类型){
    子类类型  temp = (子类类型)变量;
}

           什么情况下需要向下转型

                    因为一个对一旦向上转型后,那么就无法访问该子类对象中特有的方法,只能访问父类有的方法

                    如果需要通过该对象,访问子类的特有的方法等,那么就需要向下转型

Overload和Override的区别

Overload:方法的重载
在同一类,方法名称相同,形参列表不同的两个或多个方法称为重载。
Override:方法的重写
在子类继承父类时,如果父类的方法实现不适用于子类,子类就可以对父类的方法进行重写,覆盖。

 

标签:继承,子类,面向对象,Student,父类,方法,属性
From: https://www.cnblogs.com/woniupa/p/17133151.html

相关文章

  • 面向对象
    面向对象(重点难点)面向对象和面向过程都是编程思想面向过程注重过程,步骤,怎么做   执行者面向对象注重对象,谁来做        指挥者面向对象学习1......
  • python面向对象
    1、面向对象和面向过程的区别1.1、面向过程:是一种以事件为中心的编程思想,更关注过程。简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程......
  • java的面向对象
    面向对象OOP什么是面向过程​ 第一步是什么,然后第二部...什么是面向对象​ 物以类聚,分类的思维​描述复杂性的事物以类的方式组织代码,以对象的组织(封装)数据抽......
  • 学习打卡day07-面向对象
    1,基本知识面向过程编程:开发一个一个的方法,有数据要处理了,我们就调方法来处理。强调的是做事情的每一个步骤,逐个步骤完成功能。侧重于步骤面向对象编程:开发一个一个......
  • Java面向对象基础
    Java面向对象基础什么是面向对象编程,Java类和对象有什么区别OOP(ObjectOrientedProgramming)编程是利用“类”和“对象”来创建模型实现对真实世界的描述使程序更加......
  • Java 面向对象
    一、什么是面向对象面向对象编程:OOP,Object-OrientedProgramming。本质:以类的方式组织代码,以对象的形式组织(封装)数据。抽象三大特性:封装、继承、多态二、类与......
  • 16.Rust的面向对象编程特性
    面向对象编程(Object-OrientedPrograming,OOP)是一种程序建模的方法。一、面向对象语言的特性编程社区对面向对象语言的特性没有一个共识性的结论。但是对Rust来说,面向对......
  • 【技术分享】面向对象开发系列之【为什么要用面向对象】
    开源项目:https://girakoo.com/联系方式:[email protected]问答为什么要有面向对象开发?面向过程开发的C语言,往往有以下几个问题:不同的开发人员需要使用功能完全相同,......
  • 【技术分享】面向对象开发系列之【封装】
    封装理解封装是面向对象程序开发的基石。程序开发,最核心价值,是数据。程序其实是读取数据,操作数据,保存数据等一系列操作。那么经过良好组织过的数据,将使编程事半功倍。......
  • 面向对象的三大特征
    封装程序设计中追求“高内聚,低耦合”,主要细节由自己操作,不让外部操作;只留少量方法给外部操作;属性私有,get/set:用private关键字设置属性为私有属性,用get来获得这个数据,ge......