JAVA面向对象笔记(DAY--1)

        面向对象:

文章目录:

目录

面向对象:

文章目录:

JAVA面向对象的三大特征:

JAVA面向的类与对象:

继承、super、this、抽象类:(DAY-1)分为四个部分说明!

今日内容:

第一部分:继承:

2.定义:

3. 继承中成员变量的访问特点!

4.区分子类方法中重名的三种变量:

5. 继承中方法的覆盖重写_注意事项:

6.super关键字

 7.继承中的覆盖重写_应用场景

8. 继承中构造方法的访问特点:

9.成员方法重名——重写(Override)

要理解面向对象思想,我们先要知道什么是对象?

《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。

面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。

类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。

类具有三个特性:封装、继承和多态。 


JAVA面向对象的三大特征:

  1. 封装:核心思想就是“隐藏细节”、“数据安全”,将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。所有的内容对外部不可见。
  2. 继承:子类可以继承父类的属性和方法,并对其进行拓展。将其他的功能继承下来继续发展 。
  3. 多态:同一种类型的对象执行同一个方法时可以表现出不同的行为特征。通过继承的上下转型、接口的回调以及方法的重写和重载可以实现多态。方法的重载本身就是一个多态性的体现

JAVA面向的类与对象:

JAVA分为三种(OOA,OOD,OOP)

分别为:面向对象分析,面向对象设计,面向对象程序

继承、superthis、抽象类:(DAY-1)分为四个部分说明!

今日内容:

  1. 三大特性——继承
  2. 方法重写
  3. super关键字
  4. this关键字
  5. 抽象类

第一部分:继承:

概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示:

其中,多个类可以称为子类,单独那一个类称为父类超类(superclass或者基类
继承描述的是事物之间的所属关系,这种关系是: is-a 的关系。例如,图中兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。

2.定义:

继承:就是子类继承父类的属性行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。

好处:

1. 提高 代码的复用性
2. 类与类之间产生了关系,是 多态的前提
class 父类 { ... }  
class 子类 extends 父类 {   
...  
 }  
/** 定义员工类Employee,做为父类 
*/ class Employee { String name; // 定义name属性 // 定义员工的工作方法 public void work() {   
System.out.println("尽心尽力地工作"); }  
 }/** 定义讲师类Teacher 继承 员工类Employee */ class Teacher extends Employee {   
// 定义一个打印name的方法 public void printName() {   
System.out.println("name=" + name); }  
}  
/** 定义测试类 */ public class ExtendDemo01 { public static void main(String[] args)  
 {  
 // 创建一个讲师类对象 Teacher t = new Teacher();  
 // 为该员工类的name属性进行赋值 t.name = "小明";  
 // 调用该员工的printName()方法 t.printName();   
// name = 小明   
// 调用Teacher类继承来的work()方法 t.work(); // 尽心尽力地工作 }  
 }  

3. 继承中成员变量的访问特点!

在父子类的继承之中,如果成员变量重名,则创建子类对象时,访问有两种方式:

直接通过子类对象访问成员变量:

等号左边是谁,就优先用谁,没有则向上找。

间接通过成员方法访问成员变量:

备注:该方法属于谁,就优先用谁,没有则向上找。

 代码案例:

class Fu { 
// Fu中的成员变量。 int num = 5;
 }class Zi extends Fu {
// Zi中的成员变量 int num2 = 6;
 // Zi中的成员方法 public void show() { 
// 访问父类中的num, System.out.println("Fu num="+num); 
// 继承而来,所以直接访问。 
// 访问子类中的num2 System.out.println("Zi num2="+num2); } 
}class ExtendDemo02
 { 
public static void main(String[] args) {
 // 
创建子类对象 Zi z = new Zi(); 
// 调用子类中的show方法 z.show(); } 
}

4.区分子类方法中重名的三种变量:

 局部变量     直接写成员变量名字

 本类的成员变量     this.成员变量名

 父类的成员变量     super.成员变量名

 

在父子类的继承关系当中,创建子类对象,访问成员方法的规则:创建的对象是谁,就优先an用谁,如果没有则向上找。

注意事项:


无论是成员方法还是成员变量,如果没有

重写(Override)和重载不一样(记得区分)

概念:在继承关系当中,方法的名称一样,参数列表也一样。

重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写。

重载(Overload):方法的名称一样,参数列表【不一样】。

方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。(new的是谁,用的就是谁)

5. 继承中方法的覆盖重写_注意事项:

1.必须保证父子类之间方法的名称相同,参数列表也相同。

 @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。6

这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。

2.子类方法的返回值必须【小于等于】父类方法的返回值范围。

前提:

java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的子类。

3.子类方法的权限必须【大于等于】父类方法的权限修饰符。

小扩展提示:public > protected > (default) > private

备注:

(default)不是关键字default,而是什么都不写,留空。

6.super关键字

  super关键字的用法有三种:

  1.在子类的成员方法中,访问父类的成员变量

  2.在子类的成员方法中,访问父类的成员方法

  3.在子类的构造方法中,访问父类的构造方法

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字,修饰 父类成员变量,类似于之前学过的 this
super.父类成员变量名
class Zi extends Fu { 
 Zi中的成员变量 int num = 6; public void show() { 
访问父类中的num System.out.println("Fu num=" + super.num); 
访问子类中的num System.out.println("Zi num=" + this.num); } 
}

tip:

小贴士:Fu 类中的成员变量是非私有的,子类中可以直接访问。若Fu 类中的成员变量私有了,子类是不能
直接访问的。通常编码时,我们遵循封装的原则,使用private修饰成员变量,那么如何访问父类的私有成员
变量呢?对!可以在父类中提供公共的getXxx方法和setXxx方法。

 7.继承中的覆盖重写_应用场景

 设计原则:

对于已经投入使用的类,尽量不要进行修改。推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容!

8. 继承中构造方法的访问特点:

继承关系中,父类构造方法的访问特点:

    1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造

    2.可以通过super关键字来子类构造调用父类重载构造

    3.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造

    总结:

    子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。

9.成员方法重名——重写(Override)

如果子类父类中出现 重名 的成员方法,这时的访问是一种特殊情况,叫做 方法重写 (Override)
方法重写 :子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效 果,也称为重写或者复写。声明不变,重新实现
class Fu {
public void show() {
System.out.println("Fu show");
}
}
class Zi extends Fu {
//子类重写了父类的show方法
public void show() {
System.out.println("Zi show");
}
}
public class ExtendsDemo05{
public static void main(String[] args) {
Zi z = new Zi();
// 子类中有show方法,只执行重写后的show方法
z.show(); // Zi show
}
}
注意事项:
1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
2. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值