文章目录
一、面向对象
面向对象概述: 在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):
- 静态类方法中不允许使用和对象有关的关键字,比如:this,super;
- 静态方法只能访问静态方法和静态变量
- 随着类的加载而加载的,且只加载一次。
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);
}
}
运行结果