暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java基础:面向对象

一叶扁舟 2020-09-01
1662

一、对象

image.png

二、类

1、什么是类?

类:汽车设计图纸
对象:设计图纸制造出来的汽车

  • 类与对象的关系
    image.png

2、类的定义

image.png

3、创建对象

image.png

  • 实例变量与局部变量的区别
    image.png

4、构造方法

作用:生成对象,并对对象的实例变量进行初始化(类似于python的 def init(self):)
特点:名字必须与类名相同且没有任何返回值、可以有多个构造方法
image.png

5、this关键字

  • 用法一:调用实例属性/实例方法:this.name、this.sayHi
    image.png
  • 用法二:调用构造方法,简化新的构造方法
    image.png

三、面向对象的三大特性之封装

image.png

1、作用

段落引用尽可能隐藏对象的内部实现细节,控制对象的修改及访问权限。

2、使用

对象调用age变量,赋值为100000,语法上没问题,但是不合逻辑,为了避免这种情况,则使用封装,对变量进行限制

// 第一步:将变量设置为私有(private)
private int age;

// 第二步:设置get、set方法并过滤有效数据
public int getAge(){
    return this.age;
}


public void setAge(int age){
    // 过滤有效数据
    if (age=<160 && age>=0){
        this.age = age;
    }else{
        this.age = 18;
    }
}

四、面向对象的三大特性之继承

image.png

1、继承的使用及特点

  • 语法
    class 子类 extends 父类{}

  • 应用
    产生继承关系后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法

  • 优点
    既提高了代码的复用性,又保证了代码的可扩展性

  • 特点
    java为单继承,一个类只能有一个直接父类,但是可以多级继承,属性方法逐级叠加

  • 不能被继承
    1、构造方法不能继承
    2、private修饰的属性和方法不能被继承
    3、父子类不在同一个包内,default修饰的属性和方法也不能被继承

2、访问修饰符

image.png

3、方法的重载与重写

  • 重载
    重载(overload):在一个类中,方法名一样,参数不一样
  • 重写
    重写(override):子类中重新写一个与父类一样的方法
    【需求】继承的父类的方法不能满足需求,则子类可以对父类该方法重写
    【要求】:方法名、参数列表、返回值类型必须与父类一致,访问修饰符不能比父类严格

4、子类对象创建的过程

创建子类对象时,先会构建父类对象,再由父类共性内容,叠加子类独有内容,组合成完整的子类对象。

5、super关键字

  • super关键字用法

【用法一】:在子类中,调用父类方法/变量
父类的方法被子类重写了,还想调用父类方法,则可以使用super.来调用。
子类调用父类的东西(变量/方法),用supper.调用

【用法二】:在子类构造方法中,调用父类有参/无参构造方法
在子类构造方法中第一行默认隐藏存在super()方法,意为默认调用父类无参构造
也可以自定义使用super(arg1, arg2)方法,引用父类的带参构造。

  • this与super

this 调用本类(包括继承的)的属性、方法、本类的构造方法
super 调用父类的属性、方法、构造方法
不能同时使用。

五、面向对象的三大特性之多态

1、什么是多态

二者有直接/间接继承关系时,父类引用指向子类对象,从而产生多态

Animal animal = new Dog(); // 父类引用指向子类对象

解释:1、逻辑上讲,dog is a animal  2、语法上讲,自动类型转换

2、特点

Animal animal = new Dog(); // 父类引用指向子类对象
之后,
只能调用父类属性/方法,
如果子类重写了父类方法,调用的即是子类的重写方法

作用:屏蔽子类间的差异,灵活、耦合度(模块间关联度)低

3、多态的应用

  • 【场景一】:使用父类作为方法的形参实现多态,shi’de方法的类型更加宽泛(传入类型更宽泛)
    image.png
  • 【场景二】:使用父类作为方法返回值实现多态,是方法可以返回不同子类对象(返回类型更宽泛)。
    image.png

4、类型转换

Animal animal = new Dog(); // 父类引用指向子类对象
之后,animal就无法调用子类特有的方法了,
所以,需要类型转换
  • 向上转型(装箱)
Animal animal = new Dog(); // 父类引用指向子类对象(装箱)
  • 向下转型(拆箱)
Animal animal = new Dog(); // 父类引用指向子类对象(需要先向上转型,才能向下转型)
Dog dog = (Dog)a; // 拆箱
  • instanceof关键字
// 向下转型之前,需要判断引用中的对象真是类型,保证类型转换的正确性

Animal animal = new Dog();

if(animal instanceof Dog){
    Dog dog = (Dog) animal;
    dog.eat();
}else if(animal instanceof Cat) {
    Cat cat = (Cat) animal;
    cat.eat();
}

六、三个修饰符

1、abstract

  • 抽象类
    当各个子类调用父类的某个方法时,都需要重写,那就把父类该方法抽象化,那么,该父类就要变成抽象类了。

abstract关键字修饰的类,叫抽象类
此类不能new对象。
包含抽象方法的一定是抽象类,但是抽象类中可以有抽象方法,也可以有非抽象方法

  • 抽象类作用

1、可以被子类继承,提供共性属性和方法
2、可声明引用,更自然的使用多态

  • 抽象方法

段落引用abstract关键字修饰的方法,叫抽象方法。(必须在抽象类中)

// 抽象方法只有方法声明,没有方法实现
public abstract void eat();

非抽象子类必须重写抽象父类的所有的抽象方法

2、static

  • 静态属性(类属性)
【定义】
// 静态属性属于整个类共有的属性
static int count;

【调用】
类名.静态变量

【修改】
静态属性属于整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。

【应用】
定义一个静态变量,可以统计该类被创建的次数。(创建的时候,调用该变量+1)

实例属性
image.png
静态属性
image.png

  • 静态方法
    image.png

【特点】
静态方法只能直接访问静态成员,不能直接访问非静态成员。
静态方法中不能使用this super关键字。
静态方法可以继承,不能重写、没有多态。

  • 静态代码块
    image.png

【什么时候触发类的加载?】
创建对象、创建子类对象、访问静态方法/属性、主动加载
也就是说,第一次执行上面操作,会执行静态代码块,再次执行就不会再执行静态代码块

3、final

最后的,不可更改的。

  • final可以修饰的内容

【final类】
final修饰类:此类不能被继承
String、Math、System均为final修饰的类,不能被继承

【final方法】
final修饰方法:此方法不能被重写,但是可以被继承

【final变量】
final修饰变量:此变量不能被改变(常量)

  • 常量(无初始值,只允许赋值一次)
【局部常量】:显示初始化
finall修饰局部变量

【实例常量】:显示初始化,构造方法
finall修饰实例变量
1、实例常量不提供默认值,必须手动赋值
2、赋值时机:显示初始化、构造方法
3、如果在构造方法里面给常量赋值,那么,所有的构造方法都需要正确赋值
final String brand;
public Car(){this.brand="宝马”};
public Car(String brand){this.brand=brand};

【静态常量】:显示初始化、静态代码块
finall修饰静态变量
1、静态常量不提供默认值,必须手动赋值
2、赋值时机:显示初始化、静态代码块
final static String ADDRESS;
static{
    ADDRESS = “中国”;
}

【对象常量】:基本类型值不可变,引用类型地址不变
final int nam = 100; // final 修饰基本类型,值不变
// final修饰引用了型,地址是不可变的,但是值可以变
final int[] nums = new int[]{11, 22, 33}; // 数组元素个数不能再改变,但是元素值可以改变
finall Student s = new Student(); // s这个对象不能再初始化了,但是s对象中的属性都可以改

七、接口

1、什么是接口

image.png

接口相当于特殊的抽象类。
【微观】:接口是一种能力。
【宏观】:接口是一种标准。
接口中的方法是能力的具体要求。

  • 接口的语法及特点
    image.png
// 由于只能静态常量和抽象方法,所以,前面的后缀都可以不写,默认。
interface MyInterface{
    String FIELD = “value”;
    void method();
}
  • 接口的使用
// 接口不能被创建对象,但是类可以实现接口
public class Impl implements MyInterfacel{
    // 类中要实现接口中所有抽象方法
}
  • 接口的作用
    Java 为单继承,当父类的方法种类无法满足子类需求时,可以实现接口扩充子类能力。
    接口支持多实现,可为类扩充多种能力。

  • 接口的好处

程序耦合度低
更自然的使用多态
设计与实现完全分离
更容易搭建程序框架
更容易更换具体实现

2、接口与类的异同

image.png

3、接口的多态

【接口的多态】
实现之后,接口就相当于一个父类,可以父类变量指向子类对象(多态)。
和被继承的父类一样,使用多态后,父类(接口)变量只能调用接口中的方法,要想调用实现类(子类)独有的方法,需要强转回实现类本身类型。

image.png

4、常见关系

image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论