Java面向对象(1) --高级

一、面向对象

面向对象概述: 在Java中,对象(Object)是指一个具体事物的实例,任何事物都可以使用对象(类)来描述,如猫、狗、计算机、杯子、云、水、空气、叶子、灰尘等看得见的、看不见的、宏观的、微观的、具体的、抽象的都是对象,总之"万物皆对象";


1.面向对象的特性:
封装、继承和多态。

一、继承

1.1 继承概述:

继承是面向对象三大特征之一,继承就是子类继承父类的特征(属性)和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。


继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。

优点:可重用、提高代码效率、易维护

1.2 实现类的继承(extends)

[访问修饰符] class 子类名 extends 父类名

1.3子类实例化过程

1.加载父类,完成父类的静态变量和静态代码块,按照代码顺序执行
2.加载子类,完成子类的静态变量和静态代码块,按照代码顺序执行
3.初始化父类的非静态成员
4.执行父类的构造方法
5.初始化子类非静态成员
6.执行子类构造方法

如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的代码块、变量初始化和构造方法。


二、封装

2.1 封装的概述

封装是面向对象的三大特征之一,面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性

2.2封装的优点

  • 隐藏类的实现细节
  • 只能通过对外提供的方法对数据的访问,限制对成员变量的不正当更改
  • 降低耦合性,提高代码的可维护性

封装的原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问

2.3访问控制符的使用:

在这里插入图片描述

2.4案例

/**
 * @author bwc
 * @version 1.0
 * @intro:
 */
public class Student {

    // 学生姓名
    private String name;

    // 学生年龄
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String _name) {
        name = _name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int _age) {
        if (_age > 0 && _age < 120) {
            age = _age;
            System.out.println("赋值成功,您的年龄为: " + _age);
        } else {
            System.out.println("您输入的年龄不合法," + _age);
        }
    }
}


三、多态

转载于:😗*链接: link

多态就是同一个操作作用在不同的对象上会有不同的回应,从而产生不同的效果。 静态多态--重载 动态多态--继承、重写、父类指向子类

多态的优势 --代码扩充性增强、增加灵活性、增加效率、增加简化性


四、静态变量和方法(static)

4.1static使用场景:

1.如果我们希望不创建实例也可以调用某个方法(方法当作工具使用)
2.开发自己的工具时,可以做成静态的,方便调用
3.静态变量,可以被同一个类的多个对象实例共享(可以通过类名直接访问)
4.static变量在类加载时生成 (可以直接通过类名.变量访问)

4.2注意事项(tips)

  1. 静态类方法中不允许使用和对象有关的关键字,比如:this,super;
  2. 静态方法只能访问静态方法和静态变量
  3. 随着类的加载而加载的,且只加载一次。

4.3调用格式

格式:

// 访问类变量
类名.类变量名;

// 调用静态方法
类名.静态方法名(参数)

案例

public class ClassStatic {
    public static void main(String[] args) {
      Stu tom = new Stu("tom");
      tom.payFee(100);
      Stu mary = new Stu("mary");
      mary.payFee(200);
      Stu.payFee(100);//通过类名直接调用方法
      Stu.showFee();
    }
}

class Stu{
    private String name;
    //定义一个静态的变量,来累计学生的学费
    private static double fee = 0;

    public Stu(String name)
    {
        this.name = name;
    }
    //静态方法就能访问静态属性
    public static void payFee(double fee){
        Stu.fee += fee;
    }
    public static void showFee()
    {
        System.out.println("总学费有:"+Stu.fee);
    }
}

运行结果
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒟蒻的成成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值