java面向对象(2)

1.Java的三大特征:封装、继承、多态

三个特征中的核心:多态。
封装和继承都是为了实现多态做准备。
封装的目的:实现生成类的生成方法
继承的目的:实现方法的修改。
多态的目的:多态是同一个行为具有多个不同表现形式或形态的能力。

2.什么是封装?
封装就是“{}”
If(){
代码
}
类是对大量拥有相同属性和方法的的对象的抽象封装;
方法是大量的相同代码的抽象封装。
封装就是为了实现模块化开发。
2.1封装的好处
隐藏代码的实现(和高内聚低耦合有关)。

3.访问修饰符

修饰符 名称 使用范围 是否能被继承
private 私有 只能在本类中使用 能,但是子类不能用
protected 受保护的 同包,不同包的子类 能被继承
public 公共的 所有的都能用 能被继承
default 默认 本包中可以使用(包权限) 不能被继承

4.继承
4.1 继承的关键字:extends
4.2继承的语法格式:
public class A extends B{}
A继承B;
A叫做子类(派生类)
B叫做父类(基类)
每个类只能有一个直接父类,java不支持多继承。
4.3 继承的好处
语法层面:实现代码的重用
子类可以继承父类的属性和方法(非私有的)
子类可以直接调用父类的属性和方法
4.4 Object类
Object类是所有类的父类。
当一个类没有声明extends,没有直接父类的时候,系统会自己默认继承Object。
4.5 继承是以什么方法实现?
继承只是单纯的实现代码复用?NO。
是在内存中创建一个父类的实例。在子类实例中使用一个叫做”super”的引用,指向这个父类的实例。
如果子类的引用调用方法的时候,如果子类本身没有这个方法,就会通过super找到父类要这个方法。
父类的属性和方法都是属于父类本身。
在这里插入图片描述
4.6 两个子类的实例,SUPER不会只想同一个父类的实例
每个子类的实例都有一个属于自己的父类实例
结论:创建子类实例的时候,一定同时创建父类的实例。
在这里插入图片描述
4.7在创建子类的实例时,会优先创建父类的实例
Cat cat=new Cat();
1、一定会先调用子类的构造方法
2、一定先创建父类的实例
3、在子类构造方法的第一行调用父类的构造方法
调用时先调用子类的构造方法,在子类构造方法的第一行调用父类的构造方法;
执行的时候一定限制性父类的构造方法,在执行子类的构造方法
4.8在子类的构造方法中如何调用父类的构造方法
在子类构造方法中使用super关键字指明调用父类的哪个构造方法。
当子类没有指明时,系统自动调用父类默认的构造方法。
如果子类使用了super指明用哪个父类的构造方法是super。
使用super关键字调用父类构造方法时必须在子类构造方法的第一行。
4.9super关键字
跟this关键字的用法是差不多。
This是一个实例内部指向自己实例本身的引用;
Super就是一个实例内部指向父类实例的引用;
Super关键字可以调用父类的属性、方法和构造方法
属性 super.属性名
方法: super.方法名()
构造方法: super(参数名称);//放在第一行
4.10私有的属性和方法可以被继承,但是子类不能使用
父类的构造方法不能实现继承。
4.11 父类是怎么来的?
父类是对大量具有相同属性和方法的子类的抽象的封装
4.12 父类中盛放的所有子类的特性,子类中可以有自己的特性。
父类更通用,子类更具体。
4.13方法的重写(@Override)
因为父类有共性,子类有特性。
子类的特性,父类中方法有时就在子类中不合适。
在子类中对父类的方法进行修改,修改的方式:方法的重写。
方法重写:
必须有继承
有相同的方法原型
就是在子类中再次编写父类的方法。
方法重写的总结:
重写方法和被重写方法必须具有相同的方法名
重写方法和被重写方法必须具有相同的参数列表
重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类
重写方法的不能缩小被重写方法的访问权限
继承3步:
继承父类原有的属性和方法(构造方法除外)
改造父类原有的方法(方法的重写)
创造属于自己独有的属性和方法(核心)

5.类与类之间的关系
在面向对象的分析与设计的思路中:
不是任何两个类都可以继承。
两个类之间能不能有继承关系标准是:is-a
Is – a 是一个 继承关系 子类是一个父类
Has–a 有一个 类有一个属性是对象
Use–a 用一个 方法的参数是对象
Public class A{}
Public class B{
Private A a;//has–a
Public void test(A a){//Use–a
}

6.Object 类
Object类是所有类的父类。
Object类中的所有方法,在任意类中都存在。
6.1常用方法1:boolean equals(Object)
判定两个引用是否相同的方法。
String 类中的equals方法是比较引用吗?不是!!!比较的是内容是否相同,为什么?
因为String类重写了equals()方法。
6.2 常用的方法2:String toString();
返回对象的string格式
在用System.out.print(对象);打印一个对象的时候,系统自动调用对象的toString()方法。
6.3 getClass方法
getClass()返回一个对象的实际类型

7.面向对象三大特征:多态(核心)
前面的封装和继承都是为了多态。
封装:在没有多态实现代码复用
继承:在没有多态实现代码复用
当有了多态之后:
封装:为了能得到类和方法,面向对象的设计原则:要将变化和不变化的分开封装。
不变化:每个员工的属性(name,month),计算工资的方法
变化:计算工资的公式
继承:为了能在不修改源文件的时候扩展功能。面向对象的设计原则:开闭原则
对修改关闭:当有新的需求的时候,不能打开源文件对源码进行修改
对扩展开放:当有新的需求的时候,应该创建新的子类,在子类中对父类进行修改。
多态:在不修改源码的情况下,让以前的代码可以直接使用新的子类。
7.1多态的条件
有继承关系:父子类
必须有方法的重写:子类重写父类的方法
父类的引用指向子类的实例
7.2什么是多态?
多态就是一种使用类的形式;
父类引用指向子类的实例;
在这个过程中,会自动将子类实例转换成父类的实例,发生自动类型转换。
当前的实例是子类,向上转换变成了父类的实例。在转换的过程中就会出现方法的重写,子类会将父类中同名的方法进行覆盖。
在这里插入图片描述
7.3父类的引用指向子类的实例时,父类引用可以调用哪些方法?
父类自己的方法:引用的类型就是父类
子类重写的方法:实例是子类
当父类与子类都有这个方法是,调用那个? 子类重写的方法优先
不能调用子类自己的方法:引用的类型就是父类
7.4 引用数据类型的自动转换和强制类型转换
引用数据类型的转换只能发生在父子类之间;
自动类型转换:
子类 可以自动向 父类转换
因为子类是一个父类(is–a )
强制类型转换:
父类 向 子类转换时使用强制类型转换
子类 引用= (子类)父类对象;
这个父类对象必须是这个子类转换上去的。
类型转换错误。
在这里插入图片描述
8多态的应用
当用到多态之后:
封装:为了能得到类和方法,面向对象的设计原则:要将变化和不变化的分开封装。
不变化:每个员工的属性(name,month),计算工资的方法
变化:计算工资的公式
继承:为了能在不修改源文件的时候扩展功能。面向对象的设计原则:开闭原则
对修改关闭:当有新的需求的时候,不能打开源文件对源码进行修改
对扩展开放:当有新的需求的时候,应该创建新的子类,在子类中对父类进行修改。
多态:在不修改源码的情况下,让以前的代码可以直接使用新的子类。
8.1在多态使用时的一般格式:
让父类的引用作为方法的形参
让子类的实例作为方法的实参
在调用方法时:形参=实参 父类引用=子类实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值