初学者——面向对象的理解03

什么叫做继承

继承是Java中实现代码重要的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。简单点来说就是继承是类和类之间的关系。

为什么要使用继承

提升代码的复用性
减少代码的冗余

继承的创建

class 子类 extends 父类

extends关键字实现类的继承

super关键字

(1)使用super关键字,super代表父类对象
(2)在子类构造方法中调用且必须是第一句
(3)不可以访问父类中定义为private的属性和方法

继承条件下构造方法的调用规则

  1. 子类构造方法没有通过super显式调用父类的有参构造方法,也没通过this显式调用自身其他构造方法系统默认调用父类的无参构造方法
  2. 子类构造方法通过super显式调用父类的有参构造方法,执行父类相应构造方法,而不执行父类无参构造方法
  3. 子类构造方法通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则
private String varieties;//品种
  public Dog(String name, int health, int love,String varieties) {
        super(name, health, love);//显示调用父类构造 放在第一位
        this.varieties=varieties;
    }

子类与父类的关系

子类可以继承父类的任何非私有成员(变量  方法 构造)

子类永远比父类拥有更多的成员 子>父

方法重写规则

  • 参数列表相同
  • 方法名相同
  • 返回值类型相同或者是其子类
  • 访问权限不能严于父类
  • 父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法
  • 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)
  • 父类的私有方法不能被子类覆盖
  • 不能抛出比父类方法更多的异常

方法重写vs方法重载

方法重写原则

除了方法体不同以外,其余所有(返回类型,返回值,参数)完全一致

abstract抽象类

有抽象方法的类一定是抽象类

抽象类不一定有抽象方法

抽象类不能被实例化   例如 Pen pen=new Pen();不能实例化

抽象类的子类可以是普通类,该普通类要实现抽象类中的抽象方法

抽象类的子类也可以是抽象类,此时,父类中的抽象方法可以在子类中不被实现

封装中get和set使用

get:获取字段的值 函数返回值类型===>字段的类型

set:给字段设置值 函数的参数===>字段的类型

//获取数据
public String getName() {
        return name;
    }
        //添加数据
    public void setName(String name) {
        this.name = name;
    }

Object类被子类经常重写的方法

构造函数

一个类在没有编写构造函数的情况下默认存在一个无参构造 如果用户编写了 默认存在的就消失了

构造函数是没有返回值类型的

构造函数的执行时机:是在类的实例化的过程中,会自动调用构造函数

作用:完成类的成员变量的初始化

public Person() {
    }//这就是系统默认的构造函数即使不创建也会存在

什么是多态

同一个引用类型,使用不同的实例而执行不同操作

发生在具有继承关系的实体中,不同实体为了完成同一操作(函数名)所采取的不同方式(方法体)。

里氏替换原则(Liskov Substitution Principle)

在出现超类的位置上,可以使用其子类对象 解释一下:
(由于,子类比父类更优秀,出现父类的任何位置,子类都可以使用)

现实多态的三种方式

  1. 父类类型接收子类对象实现的多态
  2. 父类类型作为方法形参
  3. 父类类型作为方法返回值

向上向下转型

向上转型:子类对象--->父类做的转换 无需强转(没有异常)

Pet pet=new Dog("小白", 50, 89, "阿拉斯加");
        pet.showInFo();//向上转型自动转换

向下转型:父类类型--->子类类型转换 需要强转,使用instanceof比较两个类型避免发生(ClassCastException)异常

Pet pen=new Penguin("小红", 50, 90, "Q妹");
        if(pen instanceof Penguin){//用 instanceof比较避免出现异常
        Penguin peng=(Penguin)pen;//需要强制转换
        peng.eat();
        }else {
            System.out.println("您输入的不准确");
        }

值类型和引用类型

值类型:八种基本数据类型

引用数据类型:Object

值传递

将栈上的数据Copy一份

引用类型的值传递会改变

值类型的值传递不会改变

Java中只支持值传递

原文地址:https://www.cnblogs.com/tkzm/p/10950576.html

时间: 2024-10-25 19:36:07

初学者——面向对象的理解03的相关文章

Java初学者都必须理解的六大问题<2>

Java初学者都必须理解的六大问题 沈阳463整形医院对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列. 问题三:String到底变了没有? 没有.因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.请看下列代码: String s = “Hello”; s = s + “ world!”; s所指向的对象是否改变了呢?从本系列第一篇的结论很容

Java初学者都必须理解的六大问题<3>

Java初学者都必须理解的六大问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列. 问题四:final关键字到底修饰了什么? 沈阳463整形医院程序final使得被修饰的变量“不变”,但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变. 引用本身的不变: final StringBuffer a=new StringBuffe

javascript面向对象的理解(一)

第一次在园子发文: 关于js面向对象的理解: 工厂方式是什么?构造函数是什么?原形链?对象的引用? 1.对象是什么? 在js接触的比较多的就是对象了,比如: 1 var arr = []; 2 3 arr.number = 10; //对象下面的变量:叫做对象的属性 4 5 //alert( arr.number ); 6 //alert( arr.length ); 7 8 arr.a= function(){ //对象下面的函数 : 叫做对象的方法 9 alert(123); 10 }; 1

黑马程序员——Java基础---面向对象之理解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 面向对象之理解 一:理解面向对象           1,什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象.   如:桌子,椅子,电脑,电视机等. 对象的3个主要特征: a)对象行为:这个对象能做什么,既可以让这个对象完成什么

js面向对象深入理解

js面向对象深入理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 一.创建对象 创建一个对象,然后给这个对象新建属性和方法. var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 b

对java面向对象的理解

前言: 在写博客前我们应该有个好的定位,可以是对知识的梳理和理解,可以是一种新技术,可以是对难点易错的解析和理解. 正文: java面向对象的理解.面向说的通俗点就是针对,对象就是有实际意义的事物(万物皆对象)其实也就是java中的一个参数,但这个参数实际代表了某个东西(比如你有个类Tourism,这个类对 属性姓名.年龄.当Tourism tou = new Tourism(),这个tou参数就实际代表了一个类Tourism的有意义对象,而某一个方法tourism(Tourism tou)那么

Java面向对象的理解和实现代码

理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class),生产车间就是new构造器(大部分对象都是new出来的),生产出来的汽车就是我们要说的对象.可以说java编程实质就是构建类的过程. 对象?万物皆对象,宇宙中,如植物,动物,人类,每个个体都是各司其职.各尽所能的.这就要求对象高内聚.低耦合(简单理解就是人的大脑,它负责思考,想象,记忆,而不能呼吸

JS javascript面向对象的理解及简单的示例

javascript面向对象的理解及简单的示例 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 1.一切事物皆对象 2.对象具有封装和继承特性 3.对象与对象之间使用消息通信,各自存在信息隐藏 以这三点做为依据,C++ 是半面向对象半面向过程语言,因为,虽然他实现了类的封装.继承和多态,但存在非对象性质的全局函数和变量.Java.C# 是完全的面向对象语言,它们通过类的形式组

Java初学者都必须理解的六大问题&lt;1&gt;

Java初学者都必须理解的六大问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列. 问题一:我声明了什么! String s = “Hello world!”; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”.这样模糊的回答通常是概念不清的根源.如果要准确的回答,一半的人大概会回答错误. 沈阳463整形医院这