Java 25天基础-DAY 07-面向对象-继承子父类中变量的特点-函数的另一个特性重写(覆盖)

继承:
1、提高了代码的复用性
2、让类与类之间产生了关系,有了这个关系,才有了多态的特性。

注意:
千万不要为了获取其他类的功能,简化代码而继承。
必须是类与类之间有所属关系才可以继承,所属关系is a(谁是谁的一种);

java语言中,Java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同的功能,当功能内容不同时,子类对象不确定要运行那一个。
但是Java保留了这种机制,并用另一种体现形式来完成表示,“多实现”

Java支持的多层继承:
也就是一个继承体系

如何使用一个继承体系中的功能呢?
想要使用体系,先查阅体系中父类的描述。因为父类中定义的是该体系中的共性功能。
通过了解共性功能就可以知道该体系的基本功能。
那么这个体系基本就能使用了。
那么在具体调用时要创建最子类的对象,为什么呢?因为有可能父类有可能不能创建对象。
或者创建子类对象可以使用更多的功能,包括基本的也包括特有的。

简单一句话,查阅父类功能,创建子类对象功能。

聚集关系(谁里面有谁):has a

聚合:球员和球队的关系,球员是球队的一员。

组合:手是人身体的一部分。关系比聚合的紧密程度更进。

例1:简单继承关系

例2:父类对象的引用,super关键字。

变量的引用:
this代表的是本类的对象的引用;
super代表的是父类对象的引用;
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this;子类要访问父类中的同名变量时,用super。super和this的使用几乎一致。

例:在zi对象建立时,会先初始化fu的对象。

例2:当子类中没有对象时,会继承父类中的对象。

函数的另一个特性:重写(覆盖)
当子类出现和父类一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容。
如同父类的函数被覆盖一样。

当子类继承父类,沿袭了父类的功能,到子类中,但是子类虽然具备该功能,但是该功能内容却和
父类不一致,这时没有必要定义新功能,而是使用覆盖特性,保留父类的功能定义,并重写新
功能。
1、子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖。
2、静态只能覆盖静态。

例1:保留父类的功能,并重写功能内容。

函数重载:只看同名函数的参数列表。
函数重写:子父类方法要一模一样。

例2:覆盖的应用给Tel类增加System.out.println("pic")功能,而不修改Tel类。
class Tel
{
void show()
{
System.out.println("number");
}

void showname()
{
    System.out.println("name");
}

}
class NewTel extends Tel
{
void show()
{
//System.out.println("number");可以使用super.show();
super.show();
System.out.println("pic");
}
}
class jicheng
{
public static void main(String[] args)
{
NewTel dis = new NewTel();
dis.show();
dis.showname();
}
}

时间: 2024-11-10 00:49:09

Java 25天基础-DAY 07-面向对象-继承子父类中变量的特点-函数的另一个特性重写(覆盖)的相关文章

【JAVA】类继承对父类静态变量的操作

对静态变量的操作存在继承时还是有一些模糊,做了个简单的测试: class Test { private String mName; public Test(String name) { setName(name); } public void setName(String name) { mName = name; } public String getName() { System.out.println(mName); return mName; } } class A { protecte

Java 25天基础-DAY 05-面向对象

面向对象: 面向对象是相对面向过程而言: 面向对象和面向过程都是一种思想: 面向过程,强调的是功能行为 面向对象,将功能封装进对象,强调具备了功能的对象: 面向对象是基于面向过程的.     面向过程和面向对象: 面向过程的角色是执行者的角度. 面向对象的角色是指挥者的角度.   面向对象,是一种变成的思想,能把复杂的问题简单话,把执行者,变成指挥者. 思想比较抽象,可以举例说明. 事例: 电脑的窗口中有最大化,最小化,关闭:将这三个功能封装到窗口中就是面向对象的应用. 人开门:开的功能是门自己

Java多线程:“基础篇”07之线程休眠

1. sleep()介绍 sleep() 定义在Thread.java中. sleep() 的作用是让当前线程休眠,即当前线程会从"运行 状态"进入到"休眠(阻塞)状态".sleep()会指定休眠时间,线程休眠的时间会大于/ 等于该休眠时间:在线程重新被唤醒时,它会由"阻塞状态"变成"就绪状态", 从而等待cpu的调度执行. 2. sleep()示例 下面通过一个简单示例演示sleep()的用法. // SleepTest.j

Java 25天基础-DAY 06-面向对象-单例模式

/* 设计模式:解决某一类问题最行之有效的方法 Java中23种设计模式: 单例设计模式:解决一个类在内存中值存在一个对象 想要保证对象唯一 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象. 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式. 这三步怎么用代码体现呢? 1.将构造函数私有化 2.在类中创键一个本类对象 3.给创建的对象提供一个访问该对象的方式 对于事物该怎么描述还怎么描述,当需要

Java 25天基础-DAY 05-面向对象-构造函数

/* 构造函数: 对象一建立,就会调用对应的函数. 构造函数的作用,可以用于给对象进行初始化.(现实生活中的一些事物,一出现就具备的行为) 当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数 下面的空参数构造函数是Person(){} 当在类中定义了构造函数的话,系统就不再定义空参数的构造函数. 构造函数和一般函数在写法上有不同 在运行上也有不同 构造函数是在对象一建立就运行,给对象初始化. 而一般函数是对向调用才执行,给对象添加对象具备的功能. 一个对象建立,构造函数只运行

Java 25天基础-DAY 06-面向对象-ststic关键字

静态:static 用法: 是一个修饰符,用于修饰成员(成员变量,成员函数) 当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用(类名.静态成员). static的特点: 1.随着类的加载而加载. 也就是说,静态会随着类的消失而消失,说明它的生命周期最长. 2.优先于对象存在. 静态是先存在,对象是后存在的. 3.被所有对象所共享. 4.可以直接被类名所调用. 实例变量和类变量的区别: 1.存放位置, 类变量随着类的加载而加载,存在与方法区中. 实例变量随着对象的

Java 25天基础-DAY 05-面向对象-this关键字

一.this关键字 /* this关键字:看上去,是用于区分局部变量和成员变量同名的情况. this为什么可以解决这个问题? this到底代表的是什么呢? this的特点: this代表的是本类的对象,到底代表那一个呢? this代表他所在函数所属对象的引用. 也就是那个对象在调用this所在的函数,this就代表那个对象. this的应用: 当定义类中的函数时,该函数内部要用到调用该函数的对象时,这时this来表示这个对象, 但凡本类函数内部使用了本类对象,都用this表示. */ class

Java 25天基础-DAY 06-面向对象-静态代码块

/* 静态代码快 格式: static { 静态代码块中的执行语句. } 特点:随着类的加载而执行,只执行一次.优先于主函数执行. 用于给类进行初始化 / / class StaticCode { static { System.out.println("a"); } } */ class StaticCodeDemo { static { System.out.println("b"); } public static void main(String[] arg

Java 25天基础-DAY 06-面向对象-静态应用---工具类

静态应用---工具类 虽然可以同拖建立ArryTool的对象使用这些工具方法,对数组进行操作,发现了问题. 1:对象是用于封装数据的,可是ArrayTool对象并未封装特有数据. 2:操作数组的没一个方法都没有用到ArryTool对象的特有数据. 这是就考虑,让程序更严谨,是不需要创建对象的. 可以将ArryTool中的方法都定义称static的,直接通过类名调用即可. 例: class demo { public static void main(String[] args) { int []