【Java】面向对象3 面向对象语言的三大特征

面向对象特征--封装

一般意义的封装,例如将重复出现的代码抽取了一个函数,称为代码的封装(包装)

概念:将类的某些信息使用不同的访问权限修饰符隐藏起来,不允许外部程序直接访问操作,而是通过类中向外提供的特定的方法来实现对隐藏信息的操作和访问 。

优点:隐藏类的信息,通过特定的方法访问,方便加入控制语句,方便修改实现

封装案例1:将类中成员变量私有化

封装案例2: 将类中的方法私有化

java设计模式:解决某种问题的固定的方式(算法)

单例模式:让一个类在一个程序中只能创建一个对象

将类的构造方法私有化,外界不能随便调用

成员变量和局部变量

数据类型:基本类型变量 byte short int long float double char boolean 8种关键字声明的

引用类型变量 类 数组 持有的是对象的引用地址

按照位置分:

成员变量:定义在类中,可以使用权限修饰符修饰

在构造方法中进行自动的初始化赋值

生命周期:

非静态:随着对象的创建而创建,随着对象的销毁而销毁

静态的:随着类的加载而加载,随着类的销毁而销毁

存储的位置:

非静态:堆

静态的:方法区

局部变量:在方法中定义或者方法的参数,不可以使用权限修饰符修饰

必须我们自己进行初始化

生命周期:随着方法的调用而存在,随着方法的调用完毕而消失

存储的位置:栈

面向对象特征--继承

Java中的继承

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么,多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成继承关系。

就是将同一类事物中共性的属性和行为进行抽取,定义在一个类中(基类)

其他类可以继承基类,就可以拥有基类中的功能

实现代码的复用性

以及可以在子类中扩展子类自己特有的功能,而不影响其他类

举例:猫是动物,狗也是动物,我们可以抽取一个动物类,让猫和狗继承动物类

继承的优点

减少了代码冗余,提高了代码的复用性。 增强了程序的扩展(在子类中) 让类与类之间产生了is-a的关系,为多态的使用提供了前提。

只要符合is-a(什么是什么)关系,就可以使用继承

继承性的细节

子类会继承父类所有的实例变量和实例方法

子类不能直接访问父类中私有的(private)的成员变量和方法

在Java 中,继承的关键字用的是“extends”,表示子类是对父类的扩展

Java支持多层继承(继承体系)

一个父类可以同时拥有多个子类

Java只支持单继承,不支持多重继承

Object类

类 java.lang.Object,是类层次结构的根类,即所有其它类的父类。每个类都使用 Object作为超类。 当一个类没有显示的继承其他类时,默认继承Object类。

方法的重写

当父类的方法功能实现不能满足子类需求时,可以对方法进行重写( override). 子类可以对从父类中继承来的方法进行改造,在程序执行时,子类的方法将覆盖父类的方法。我们称为方法的重写也称为方法的覆盖。

注意:构造方法,静态方法不能重写,成员变量不存在重写

方法重写的规则

1.子类重写的方法必须和父类被重写的方法名称,参数列表相同。

2.子类重写的方法的返回值类型与父类保存一致。

3.子类重写的方法使用的访问权限不能小于父类被重写方法的访问权限。 注意:① 父类私有方法不能重写 ② 跨包的父类默认权限的方法也不能重写

4.子类方法抛出的异常不能大于父类被重写方法的异常

@Override使用说明:

@Override是Java中的一个注解标签,用来进行标记在重写的方法上面,表示此方法是从父类重写而来,用来检测是不是满足重写方法的要求。也可以不用添加,只要格式满足要求,也是正确的方法覆盖重写。建议保留:1.编译器可以进行语言验证,2.阅读代码时,明确知道此方法是重写的

super关键字

在Java类中使用super来调用父类中的指定操作: super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造器中调用父类的构造器

注意: 尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员 super的追溯不仅限于直接父类,还可以是父类的父类 super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

误区: 不要把super误认为是父类对象,在创建子类对象时,不会创建父类对象. 只会将父类中的信息加载到子类对象中存储.

继承中的构造方法

子类继承父类时,不会继承父类的构造方法。只能通过“super(形参列表)”的方式调用父类指定的构造方法。 规定super(形参列表),必须声明在构造器的首行。

如果在子类构造器的首行没有显示调用super(形参列表),则子类此构造器默认调用super(),即调用父类中空参的构造器。

这么做是为了保证先对父类成员进行初始化。 开发中常见错误:如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有空参的构造器,则编译出错。

抽象类

抽象方法

抽象方法:只有方法声明,没有具体实现的方法. 抽象方法必须用abstract关键字进行修饰.

为什么要有抽象的方法?答:在一些体系结构的顶端类中,有一些功能没必要实现,因为不同子类的实现都不同,这个时候就可以将方法声明为抽象方法。

抽象类: 使用absract修饰的类就是抽象类 一个类中如果包含抽象方法,那么这个类必定是抽象类,一个类是抽象类,不一定包含抽象方法 抽象类中肯能包含抽象方法,抽象方法不完整,所以类也是抽象的 特点: 抽象类不能被创建对象,其他功能与正常类相同,可以有成员变量,成员方法,构造方法。 一个子类如果继承了抽象类,要么重写抽象类中所有抽象方法,要么将该类也定义为抽象类。

面向对象特征--多态

多态:同一种事物在不同时刻表现不同的状态,将子类类型上升为父类类型

二者存在直接或者间接的继承关系时,父类引用指向子类的对象,即形成多态。

Animal dog =new Dog();

Animal cat =new Cat();

多态性的优点:提高代码的扩展性

向上转型:

多态环境下对成员方法的调用 : 编译看左边,运行看右边。

多态环境下对静态成员方法的调用 : 编译和运行都看左边。

多态环境下对成员变量的调用 :编译和运行都看等号左边。

注意:变量不存在被子类覆写这一说法,只有方法存在覆写。

向下转型:

出现的问题:父类引用仅能访问父类所声明的属性和方法,不能访问子类独有的属性和方法。

解决办法:将父类类型向下转化为子类类型

转换时需要使用instanceof 判断,父类类型中持有的实际类型 是否是指定的子类类型

父类类型 与 指定类型 相同返回true,不同则返回false

final关键字

final 用于修饰类,方法,参数和成员变量(常量) final修饰的类 是不能被继承的,所以不能修饰抽象类,例如Java中String类 final修饰的方法 不可以被重写 final修饰的参数: 参数值在方法中不可被修改 final修饰的成员变量值不能被改变,因此称为常量

//情况1:在类定义时,值就确定,直接复制,赋值后值不能改变的,所以建议使用static修饰
final static int a=10;
//情况2:在定义时,值不明确,必须在创建对象后,在构造方法对其进行赋值,每个对象中拥有一个常量
final int count;

接口

接口是计算机领域的名词,表示一种功能的定义

例如 USB接口,定义USB接口的规范,让其他设备去实现

接口可以看作是一种特殊的抽象类,里面也可以包含抽象方法

接口不能被创建对象,被其他类实现,重写抽象方法

主要也是用来定义功能的

public interface MyInterface {
 int num = 10; //所有属性默认为: public static final
 public void foo();//抽象方法是:public abstract
 public static void test(){ }
 public default void test1(){}
}

接口的定义:使用 interface 关键字用来声明一个接口。

[访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n] 
{ 
 // 声明常量 抽象方法 静态方法 默认方法
 }

接口的使用:类使用implements关键字实现接口。在类声明中,Implements 关键字放在class声明后面。

关键字放在class声明后面。
[访问修饰符] class 类名 implements 接口名1,接口名2……{ }

结合继承: [访问修饰符] class 类名 extends 父类名 implements 接口名1,接

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值