面向对象的三大特征

面向对象的三大特征

在这里插入图片描述

封装

什么是封装

  • 封装是如何设计对象的属性的方法和属性

封装的原则

  • 对象代表什么,就得封装对应的数据,并提供数据相应的行为

如何理解封装思想:找对象,调方法

private关键字

  • 是一种修饰符
  • 可以修饰成员变量和成员方法
  • 被private修饰的成员只有在本类中才能被访问
  • 在其他类中使用被private修饰的成员变量,如果要被其他类使用需要提供对应用public修饰的setter和getter方法

当方法变量和局部变量重名时,会触发就近原则,此时要使用成员变量需要使用this修饰

构造方法

  • 构造方法也叫构造器,构造函数

  • 作用

    • 在创建对象时给成员变量进行初始化赋值
  • 特点

    • 方法名与类名相同,大小写也一致
    • 没有返回值类型,连void都没有
    • 没有具体的返回值
  • 执行时机

    • 创建对象的时候由虚拟机调用,不能手动调用
    • 如果我们自己没有写构造方法,虚拟机会自动创建一个无参构造方法
    • 每创建一次对象就会调用一次构造方法

标准类的制作

  • 成员变量

    • 使用private修饰
  • 构造方法

    • 提供一个无参构造方法
    • 提供一个有参构造方法
  • 成员方法

    • 提供每一个成员变量对应的setXxx()方法和getXxx()方法
    • 提供一个显示对象信息的show()方法

API

  • Application Programing Interface:应用程序编程接口
  • Java API就是JDK中提供各种功能的java类

String类

  • String类表示字符串,Java程序中所有的用双引号的字符串,都是String类的对象

  • 字符串的特点

    • 字符串不可变,他们的值一旦创建就不能被更改
    • String的值不可变,但是可以共享
    • 字符串效果上市相当于字符数粗(char[])但底层原理是字节数组
  • 字符串的比较

    • 使用==比较

      • 基本数据类型比较数据的值是否相同
      • 引用数据类型是比较地址值是否相同
    • 使用equals()比较

      • 比较其内容是否相同
  • 常用方法

    • charAt()用于输出字符串中的某一个字符
    • length()方法 获取字符串长度
    • indexOf()方法 传递某个字符,返回在字符串中的某一个一个位置
    • subString(int start)方法 默认是取到字符串末尾
    • equals()方法 判断字符串内容是否相同,区分大小写
    • contains()方法 判断该字符串是否包含传递过来的字符串。
    • startsWith()方法 判断字符串是否以传进来的字符串开头。
    • endsWith()方法 判断字符串是否以传进来的字符串结尾。
    • isEmpty()方法 判断字符串是否为空。
    • .toCharArray()方法 将String类型的字符串转化为char字符数组
    • valueOf(char[] data)方法 将传递的字符数组,组合成字符串。
    • toLowerCase()方法 把字符串转成小写toUpperCase()方法 把字符串转成大写
    • comcat()方法 字符串拼接

StringBuilder

  • StringBuilder是一个可变的字符串类,可以把他看成是一个容器,可变是指StringBuilder对象中的内容是可变的

  • 常用方法

    • 追加

      • append()
    • 反转

      • reverse()

String和StringBuilder的相互转换

  • 通过toString()可以把StringBuilder转换成String
  • 通过构造方法可以把String转换成StringBuilder

ArrayList

  • 特点

    • 提供一个存储空间可变的存储模型,存储的数据容量可以发生改变
  • ArrayList

    • 可调整大小的数组实现
    • E是一种特殊的数据类型,泛型

继承

概述

  • 集成式面向对象的三大特征之一,可以使得子类具有父类的属性和方法

继承中子类的特点

  • 子类可以有父类的内容
  • 子类也可以有自己的内容

继承的好处

  • 提高了代码的复用性
  • 提高了代码的可维护性

弊端

  • 继承使得类与类之间产生了关系,类的耦合性增加了,当父类发生变化,子类的实现也不得不发生变化,削弱了子类的独立性

继承中变量的访问

  • 当前方法,当前类,当前类的父类

  • this和super

    • this访问当前类的成员变量

      • 代表本类对象的引用
    • super访问当前类父类的成员变量

      • 代表父类存储空间的标识

继承中构造方法的访问特点

  • 子类中所有的构造方法都默认会访问父类的无参构造方法

    • 原因如下:

      • 子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化钱,一定要先完成父类数据的初始化
      • 每个子类构造方法的第一条语句默认的语句都是super();

继承中成员方法的访问特点

  • 通过子类对象访问一个方法

    • 子类范围内寻找
    • 父类范围内寻找
    • 都没有找到就报错
  • 方法的重写

    • 子类中出现了和父类一模一样的方法声明
  • 应用场景

    • 当子类需要弗父类功能,而功能主体子类有自己特定的内容时,可以重写父类中的方法
  • @override重写的注解,检查重写的重要性

    • 父类中的私有内容子类无法继承
    • 子类重写父类方法时,其访问权限不能比父类低
  • 继承的注意事项

    • 一个类不能继承多个类(支持单继承,不支持多继承)

例题

public class Circle {


     double radius;

    public Circle(){
        this.radius=1;
    }
    public void setRadius(double radius){
        this.radius=radius;
     }
    public double getRadius() {
        return radius;
    }
    double findArea(double radius){
        return Math.PI*radius*radius;
    }


}

public class Cylinder extends Circle{
    double length;

    public Cylinder(){
        this.length=1;
    }
    public void setLength(double length) {
        this.length = length;
    }
    public double getLength(){
        return length;
    }

    double findVolume(double length){
        return findArea(super.radius)*length;
    }
}

public class Test {
    public static void main(String[] args) {
        Cylinder v=new Cylinder();
        //v.setRadius(2);
        //v.setLength(2);
        System.out.println("半径为:"+v.getRadius());
        System.out.println("底面积为:"+v.findArea(v.radius));  
        System.out.println("圆柱的高为:"+v.getLength());
        System.out.println("圆柱的体积为:"+v.findVolume(v.getLength()));
    }
}

多态

什么是多态

  • 对象的多种形态

    • 把子类对象赋值给父类类型的变量
    • 多态可以根据传递的对象不同,调用不同的show()方法

多态的前提

  • 有继承/实现关系
  • 有父类引用对象指向子类对象
  • 有方法重写

多态的好处

  • 使用父类类型作为参数,可以接受所有的子类对象
  • 体现多态的扩展性和便利

多态调用成员的特点

  • 变量调用

    • 编译看左边,运行也看左边
  • 方法调用

    • 编译看左边,运行看右边

多态的弊端

  • 不能调用子类特有的方法

instanceof

强制类型转换能解决什么问题

  • 可以转换成真正的子类类型,从而调用子类固有的的功能
  • 转换类型与真是对象不一致会报错
  • 转换时用instanceof进行判断
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值