目录
一、类的创建
1.1 创建类包(Package)
(选做)为了更好地管理日后越来越多的类,首先新建类包(Package),相当于文件夹的作用。步骤如图:
1.2 创建类(Class)
右击类包,依次点击New-Class,输入类名,点击Finish完成创建
二、类的定义
2.1 成员变量
2.2 构造方法
以管理员类(Admin.java)为例,定义成员变量(属性)和构造方法:
package javaBean;
public class Admin {
//类是属性和功能的封装体
//属性(特征)
private String id;
private String name;
private String psw;
private String type;
//功能(方法、函数)
/*
* 用户自定义构造方法,系统默认的构造方法就会被屏蔽,
* 如果用户需要此默认构造方法,则必须显式定义出来
*/
public Admin() {}
public Admin(String id,String name,String psw,String type) {
//方法名和类名同名、没有返回值类型,此方法称为构造方法,
//作用:用类创建对象时进行初始化
this.id=id;
this.name=name;
this.psw=psw;
this.type=type;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getAll() {
return id+" "+name+" "+psw+" "+type;
}
}
除手动输入外,也可以使用Generate自动生成所选变量的getter/setter等常见方法。
三、类的访问权限
Class类、成员变量、成员方法的访问权限:
同一个类 | 同一个包 | 不同包下子类 | 不同包下非子类 | |
Private(私有) | √ | |||
Default(默认) | √ | √ | ||
Protected(受保护) | √ | √ | √ | |
Public(公共) | √ | √ | √ | √ |
(注意:Class类的访问权限不可以是private或protected)
四、类的三大特性
4.1 封装性
(1)含义:把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。
封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。即用户无需知道内部的数据和方法的具体实现细节,只需根据外部接口进行操作。
例:Admin类的使用
package app;
import javaBean.Admin; //导入Admin类
public class AdminApp {
public static void main(String[] args) {
//创建管理员
Admin adm1=new Admin("1001","小波","123456","rev");
// 等价于:
// Admin adm1=new Admin();
// adm1.setId("1001");
// adm1.setName("小波");
// adm1.setPsw("123456");
// adm1.setType("rev");
System.out.println(adm1.getAll());
}
}
(2)实现:
①修改属性的访问控制符(修改为private);
②创建getter/setter方法(用于属性的读写);
③在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);
直接通过对象调用属性,修改属性值是不安全的,那怎么办?
为了实现良好的封装,通常将类的成员变量声明为private,为了能够在外部使用,可以通过定义public方法来对这个变量来访问。对于一个变量XX,一般定义2个方法来实现读取和赋值操作,分别是getXX()和setXX(参数xx)。
*设置为私有(private)的成员变量只能在本类中使用,所以也叫全局变量。
(3)优缺点:
①优点:将变化隔离;便于使用;提高重用性;提高安全性;
②缺点:将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度;
4.2 继承性
(1)含义:多个类具有共同的属性与方法的时候,将这些共同部分抽取出来定义到一个公共的类中,其他及各类可以与这个公共的类形成继承关系,从而在多个类中不需要重复定义公共部分。这个公共的类就是父类,也称为超类或者基类,其他的类就是子类。
关键字:extend、super
① 对于父类的非私有属性,子类可以直接访问;
② 对于父类的私有属性,子类需要通过使用super.get()方法访问。
例:Admin类的继承(子类Admin_chi在父类Admin基础上添加了email属性,同时对父类的getAll方法进行重写)
package javaBean;
public class Admin_chi extends Admin{
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email=email;
}
public String getAll() {
//方法的重写,重写的方法权限不能低于父类中的同名方法
//在子类中如果要调用父类方法,使用super关键字
//super指父类对象,this指当前类对象
return super.getAll()+" "+this.email;
}
}
package app;
import javaBean.Admin_chi;
public class AdminApp {
public static void main(String[] args) {
Admin_chi adm2=new Admin_chi();
adm2.setId("1001");
adm2.setName("小波");
adm2.setEmail("1846839258@qq.com");
System.out.println(adm2.getAll());
}
}
(2)特点:
① 子类比父类强大(子类权限不能低于父类);
② java是单继承,不能进行多继承。但是可以继承多层子类(不建议继承超过3层);
③ 子类继承父类,但是对父类的成员变量是无法直接操作,只能通过父类继承过来的setter和getter方法;
(3)优缺点:
①优点:减少代码量,提高复用率;使类与类之间存在继承关系,是实现多态操作的前提。
②缺点:当一个父类存在多个子类时,如果父类发生变化,那么这些子类会随之一同变化,造成类与类之间的“强耦合”关系。
4.3 多态性
方法重载:方法名称相同但参数不同,使用时系统会根据输入的参数来调用对应的方法。
构造方法也使用了类方法的重载技术:
public Admin() {}
public Admin(String id,String name,String psw,String type) {
this.id=id;
this.name=name;
this.psw=psw;
this.type=type;
}
……
Flag:要成为一个日更选手:)