Java面向对象(封装、继承、多态···)

面向对象

三大特征 :封装、继承、多态

public class 类名{
    ···
}
  • 成员变量(代表属性,一般为名词)
  • 成员方法(代表行为,一般为动词)
  • 构造器
  • 代码块
  • 内部类

得到类的对象

类名 对象名 = new 类名();

使用对象

访问属性: 对象名.成员变量
访问行为: 对象名.方法名()

注意事项:一个Java文件中可定义多个class类,但只能有一个用public修饰

构造器

作用:用于初始化一个类的对象,并返回对象的地址。

格式

public class Car{
    
    public Car(){  //无参数构造器
        
    }
    public Car(String n,double p){  //有参数构造器
        
    }
}

调用构造器得到对象:

类 变量名称 = new 构造器;

Car c = new Car();

Car c1 = new Car("奔驰",666);

分类和作用

  • 无参数构造器(默认存在):初始化对象时,成员变量均为默认值
  • 有参数构造器:初始化对象,同时接收参数为对象进行赋值

注意事项

  • 任何类一旦定义出来,默认就自带了无参数构造器

  • 定义了有参数构造器后就没有了无参数构造器,需要自己手写一个无参数构造器

封装

定义:隐藏实现细节,暴露出合适的访问方式

原则:对象代表什么,就封装对应的数据,并提供数据对应的行为

更好地封装:
  • 对成员变量使用 private 关键字修饰 ,(只能在当前类中进行访问)
  • 为每个成员变量提供配套public修饰的getter\setter方法暴露其取值和赋值
JavaBean

定义

  • 成员变量使用private 修饰
  • 提供每一个成员变量对应的 setXxx()/getXxx()
  • 必须提供一个无参构造器
成员变量与局部变量区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECK9Nn4c-1657534196150)(C:\Users\hy020\AppData\Roaming\Typora\typora-user-images\image-20220709170620398.png)]

继承
格式
class 父类 {
}
 
class 子类 extends 父类 {
}
类型
  • 单继承
  • 多重继承
  • 不同类继承一个类
  • 多继承
特性
  • 子类有父类非 private 的方法
  • 子类可以有自己的属性和方法,对父类进行扩展
  • 可以用自己的方式实现父类的方法(重写)
  • Java为单继承,但是可以多重继承
  • 提高了类之间的耦合性(缺点,使得代码的独立性变差)
关键字
extends

class 子类 extends 父类{

}

implements

使用该关键字可变相使 Java 具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口

public interface A {
    public void eat();
    public void sleep();
}
 
public interface B {
    public void show();
}
 
public class C implements A,B {
}
this
  • 可以出现在构造器、方法中,代表当前对象的地址
  • 作用:访问当前对象的成员变量、成员方法
super

通过super来实现对父类成员的访问,来引用当前对象的父类

final

用来修饰变量,方法和类

  • 修饰的类为最终类,不能被继承
  • 修饰的方法不能被子类重写
构造器
  • 父类的无参构造器:默认自动调用
  • 父类的有参构造器:必须使用super 调用
重写

子类对父类的方法进行重新编写,返回值和形参不能改变

好处 :可以根据需要来定制方法

要求 :不能抛出新的检查异常或者更多的检查异常

规则:

  • 参数列表必须相同
  • 返回类型可以不同, 但必须是父类返回值的派生类
  • 访问权限不能比父类中的方法权限更低
  • 父类成员方法只能被其子类重写
  • final声明的方法不能重写
  • 构造方法不能被重写
  • 在一个包中子类可重写父类的所有方法,除了privatefinal
  • 不在一个包中子类只能重写父类的 publicprotected 方法
重载
  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。
多态
存在的必要条件
  • 继承
  • 重写
  • 父类引用 指向 子类对象

使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

实现方式
  • 重写
  • 接口
  • 抽象类和抽象方法
抽象类与抽象方法

抽象类不能实例化对象,其他与一般类无异,只能通过继承实现抽象类。

抽象方法
public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

注意

  • 只有抽象类才能包含抽象方法
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类
  • 继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类

必须有子类实现抽象方法,否则从父类到子类都不能实例化对象

规定

  • 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
  • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  • 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
  • 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
  • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
接口
  • 不是类,接口包含类要实现的方法
  • 除非是抽象类,否则该类要定义接口中的方法
  • 无法被实例化,可以被实现
  • 可用来声明一个变量
特性
  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。

  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

  • 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

  • 接口中的方法都是公有的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值