面向对象的三大特征

面向对象三大特征(封装、继承、多态)

1、封装

封装就是将一些细节信息隐藏起来,对于外界不可见
封装在java当中的体现:
1.方法就是一种封装
2.关键字private也是一种封装

1.1this关键字:

当方法的局部变量和类的成员变量重名的时候,根据就近原则,优先使用局部变量
如果需要访问本类当中的成员变量,需要使用格式
this.成员变量
“通过谁调用的方法,谁就是this”

1.2构造方法:

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时其实就
是在调用构造方法
格式:
public 类名称(参数类型 参数名称){
方法体
}
注意事项
1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
2.构造方法不要写返回值类型,连void都不写
3.构造方法不能return一个具体的返回值
4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么事情都不做
public Student(){}
5.一旦编写了至少一个构造方法,那么编译器将不再赠送
6.构造方法也是可以进行重载的
重载:方法名称相同,参数列表不同

2、继承

继承是多态的前提,如果没有继承,就没有多态
解决问题:共性抽取
1.子类可以拥有父类的“内容”
2.子类还可以拥有自己专有的内容

三种变量名访问:
父类成员变量:super.成员变量名
本类成员变量:this.成员变量名
局部变量:直接写

例如

public class Zi extends Fu {
int num = 10;
public void showNum() {
    int num = 20;
    System.out.println(num);  //局部变量的num
    System.out.println(this.num); //本类的成员变量
    System.out.println(super.num); //父类的成员变量
	 }
}

2.1方法覆盖重写的注意事项:

1.必须保证父子类之间方法的名称相同,参数列表也相同
@Override注解:写在方法前面,用来检测方法是否重写 不写也是可以的推荐写上

2.子类方法的返回值必须小于等于父类方法的返回值范围
Object类是所有类的公共最高父类

3.子类方法的权限必须大于等于父类方法的权限修饰符
扩展:public> protected> (default)> private
注意:default不是关键字default,而是什么都不写,留空

注意:

1.Java语言是单继承的。
一个类的直接父类只能有唯一一个。
2.Java语言可以多级继承。
Class A{}
Class B extends A{}
Class C extends B{}
Java.lang.Object 最高父类
3.一个子类的直接父类是唯一的,但是一个父类可以拥有很多个子类

2.2抽象

如果父类当中的方法不确定{}方法体的实现,这就是个抽象方法。
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束
抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract
如何使用抽象类和抽象方法:
1.不能直接创建new抽象对象。
2.必须用一个子类继承抽象类
3.子类必须覆盖重写抽象父类当中的所有抽象方法
覆盖重写(实现) 子类去掉抽象方法的abstract关键字,然后补上方法体大括号
4.创建子类对象使用
注意:
一个抽象类不一定含有抽象方法,但有抽象方法的类必定是抽象类。
抽象类的子类,必须重写抽象父类当中的所有的抽象方法,否则,编译报错。

2.3接口

接口就是一种公共的规范标准。只要符合规范标准,就可以大家通用。
接口就是一种引用数据类型,最重要的内容就是其中的:抽象方法
如何定义一个接口格式:
public interface 接口名称{
//接口内容
}
备注:换成了关键字interface之后,编译生成的字节码文件仍然是:java  -->.class。

2.3.1接口使用步骤

1.接口不能直接使用,必须有一个实现类来实现该接口
格式:
public class 实现类名称  implements 接口名称{
}
2.接口的实现类必须覆盖重写(实现)接口中的所有抽象方法。
实现,去掉abstract关键字,加上方法体大括号

2.3.2接口使用注意事项:

1.接口是没有静态代码块或者构造方法的
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
格式:
public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
//覆盖重写所有抽象方法
}
3.如果实现类所实现的多个接口当中,存在多个重复的抽象方法,那么只
需要覆盖重写一次就好
4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就
必须是一个抽	象类。
5.如果实现类实现的多个接口当中,存在重复的默认方法,那么实现类一
定要对冲突的默认方法中进行覆盖重写
6.一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,
优先用父类当中的方法

2.3.3不同版本接口的内容

在java 9+版本中,接口的内容可以有:
1.成员变量其实就是常量,格式:
public static final 数据类型 常量名称 = 数据值;
注意:
常量必须进行赋值,而且一旦赋值不能改变。
常量名称完全大写哦,用下划线分隔

2.接口中最重要的就是抽象方法,格式:
Public abstract 返回值类型 方法名称(参数列表);
注意:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。

3.从java 8+开始:接口里允许定义默认方法,格式:
Public default 返回值类型 方法名称(参数列表){方法体}
注意:默认方法也可以被覆盖重写

4.从java 8开始,接口里允许定义静态方法,格式:
Public static 返回值类型 方法名称(参数列表){方法体}
注意:应该通过接口名称调用,不能通过实现类对象调用接口静态方法

5.从java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表){方法体}
静态私有方法:private static 返回值类型 方法名称(参数列表){方法体}
注意:private的方法只有接口自己才能调用,不能被实现类或别人调用

3、多态

extends继承或者implements实现,是多态性的前提。

3.1多态

代码当中体现多态性,其实就是一句话:父类引用指向子类对象
格式:
父类名称 对象名 = new 子类名称();
或者
接口名称 对象名 = new 实现类名称();
编译看左边,运行看右边
多态的好处:
无论右边new的时候换成哪个子类对象,符号左边调用方法都不会变化。

例如:

一个员工(Employee)类,老师(Teacher)继承了这个员工类,助手(Assistant)也继承这个类。
public class demo01 {
 public static void main(String[] args) {
   Employee one = new Teacher();
   one.work();
   Employee two = new Assistant();
   two.work();
 }
}

3.2对象的向上转型

父类名称 对象名 = new 子类对象();
含义:右侧创建一个子类对象,把它当做父类来看待使用。
注意事项:向上转型一定是安全的。从小范围转向大范围。有一个弊端,一旦向上转型	为父类,那么就无法调用子类特有的方法。
对象的向下转型:其实是一个[还原]的动作
格式:子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象,还原成为本来的子类对象。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值