Java基础相关3(面向对象,new)

Java基础相关

面向对象

OOA面向对象分析

OOD面向对象设计

OOP面向对象编程(面向对象程序设计)

面向对象三大特征

  1. 封装:

    • 类:封装的是对象的属性和行为
    • 方法:封装的是具体的业务逻辑实现
    • 访问控制修饰符:封装的是具体的访问权限
  2. 继承:

    • 作用:代码复用

    • 超类:所有派生类所共有的属性和行为

    • 接口:部分派生类所共有的属性和行为

    • 派生类:派生类所特有的属性和行为

    • 单一继承、多接口实现,传递性

  3. 多态:

    • 行为多态:所有抽象方法都是多态的(通过方法的重写来实现)
      对象多态:所有对象都是多态的(通过向上造型来实现)
    • 向上造型、强制类型转换、instanceof判断

继承

继承于某一个类,就可以直接获得这个类的属性和方法,可以提高程序的复用性;

将不同类中,重复的属性和行为,单独写到一个超类中,再让这些类,继承这个超类。

  • Java采用extends关键字实现继承,实现继承的类叫子类(派生类),被继承的类叫父类(超类);
  • 任何类都只能有一个直接的父类,和无数个间接的父类,多个类可以继承于同一个父类;
  • 若一个类没有显示指定父类,则这个类默认继承于java.lang.Object;
  • 父类型引用指向子类对象为向上造型,但通过父类的引用只能访问父类所定义的成员,而不能访问子类所扩展的部分,

另外,从父类角度看,父类派生了子类,但从子类角度看,是子类扩展(extends)了父类

作用:

  • 作用:代码复用
  • 通过extends来实现继承
  • 超类/父类:派生类所共有的属性和行为
  • 派生类/子类:派生类所特有的属性和行为
  • 派生类可以访问:派生类的+超类的,但超类只能访问超类的
  • 一个超类可以有多个派生类,一个派生类只能有一个超类-----单一继承
  • 继承具有传递性

Java规定:构造派生类之前必须先构造超类

在派生类的构造方法中,若自己没有调用超类的构造方法
         ----则编译器默认super()调用超类的无参构造方法
在派生类的构造方法中,若自己调用了超类的构造方法
         ----则不再默认提供
注意:super()调用超类构造方法,必须位于派生类构造方法的第一行
方法重写

在子类中,定义与父类同名的方法,用来覆盖父类中这个方法的逻辑,叫做重写。

方法的重写是指,子类中的方法与父类中的方法有完全相同的方法签名,即返回值类型,方法名,参数都完全相同。子类方法的访问级别不能低于父类方法的访问级别

重写的规范

  • 子类方法的名称、参数列表与父类相同;
  • 子类方法的返回类型与父类相同或更小;
    • 子类重写父类的方法如果返回值类型是基本类型的话,要求相同。
  • 子类方法声明的异常与父类相同或更小;
  • 子类方法的访问权限与父类相同或更大。

重写与重载

  • 重载发生在同一个类的多个同名方法之间,让代码便于调用;
  • 重写发生在子类与其父类的同名方法之间,让代码易于复用。
  • 父类与子类之间也存在重载,即在子类中定义出与父类名称相同、参数列表不同的方法
this

this:指代当前对象,哪个对象调用方法它指的就是哪个对象

只能用在方法中,方法中访问成员变量之前默认有个this.

this的用法:

1.普通的直接引用

2.形参与成员名字重名,用 this 来区分:

this.成员变量名-----------访问成员变量(成员变量与局部变量同名时,
                            访问成员变量时this不能省略)
this.方法名()-------------调用方法(一般不用)
this()-------------------调用构造方法(一般不用)
super

super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

  • 通过super关键字,调用父类的成员变量;
  • 通过super关键字,调用父类的成员方法;
  • 通过super关键字,调用父类的构造方法。
  • super指代当前对象,用于调用该对象在父类中的成员;
  • 通过super调用构造方法时,并不会创建一个新的对象;
  • 父类构造方法会在子类构造方法之前调用,并且总会被调用一次。

super 的用法:

1.普通的直接引用

与 this 类似,super 相当于是指向当前对象的父类,这样就可以用 super.xxx 来引用父类的成员。

2.子类中的成员变量或方法与父类中的成员变量或方法同名

可以调用父类的方法

super 和 this的异同
  • super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
  • this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
  • super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参) this:它代表当前对象名(在程序中易产生二义性之处,应使用 this 来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用 this 来指明成员变量名)
  • 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
  • super() 和 this() 类似,区别是,super() 从子类中调用父类的构造方法,this() 在同一类内调用其它方法。
  • super() 和 this() 均需放在构造方法内第一行。
  • 尽管可以用this调用一个构造器,但却不能调用两个。
  • this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  • this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。
  • 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。

多态

在程序运行时,相同类型的变量可以呈现出不同的行为特征,这就是多态!

多态的作用 :提高程序的扩展性!

多态的意义:

  • 同一类型的引用在指向不同的对象时,有不同的实现------所有抽象方法都是多态的.行为的多态:cut()、step()、getImage()…
  • 同一个对象在被造型为不同的类型时,有不同的功能------所有对象都是多态的概念
向上造型/自动类型转换:
  • 超类型的引用指向派生类的对象
  • 能造型成为的类型有: 超类+所实现的接口
  • 能点出来什么,看引用的类型
  • 父类型引用指向子类对象为向上造型,但通过父类的引用只能访问父类所定义的成员,而不能访问子类所扩展的部分,
强制类型转换,成功的条件只有如下两种
  • 引用所指向的对象,就是该类型
  • 引用所指向的对象,实现了该接口或继承了该类

强转时若不符合如上条件,则发生ClassCastException类型转换异常
建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型

引用

Human human = new Human();

创建了一个Human类的对象human。

上面是一个非常简单的表述,但我们有许多细节需要深入:

  1. 首先看等号的右侧。new是在内存中为对象开辟空间。具体来说,new是在内存的堆(heap)上为对象开辟空间。这一空间中,保存有对象的数据和方法。
  2. 再看等号的左侧。human指代一个Human对象,被称为对象引用(reference)。实际上,human并不是对象本身,而是类似于一个指向对象的指针。human存在于内存的栈(stack)中。
  3. 当我们用等号赋值时,是将右侧new在堆中创建对象的地址赋予给对象引用。

小结

  • 超类的引用可以指向自己或派生类,而能使用哪些属性和方法,看等号右侧指向的对象,
    • 指向本身,则使用自身的属性和方法
    • 指向派生类,则使用派生类中包含的超类属性和方法。若派生类中重写了方法,则使用被重写的方法。
    • 变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
  • 派生类的引用不能指向超类,只能指向本身或它的派生类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值