特别感谢张浩同志的支持! ^o^/
类的定义
类似于结构体,类在使用前必须先声明其属性
该实例创建后,Java将为一个名为Zhang_Hao的haoHao类腾出一片空间。在类体中,可以存放变量和方法(类似函数),是一个相对独立的单元
1 2 3 4 5 6 7 8 9
| class haoHao{ String name; int gender = "Man";
public void genderDeclare(){ System.out.println("I'm a " + gender); } }
|
如果没有加关键字static,那么在使用类的方法前,还必须要创建一个类的实例
1 2 3
| haoHao zhangHao = new haoHao(); zhangHao.genderDeclare();
|
而静态类只加载一次,并一直在堆中存储。因此静态类不需要创建类的实例。
1 2 3 4 5 6 7 8 9 10 11
| static class haoHao{ String name; int gender = "Man";
public void genderDeclare(){ System.out.println("I'm a " + gender); } }
haoHao.genderDeclare();
|
类的访问控制
为了使不同类之间能既相互联系又保持相对独立,设置合理的访问控制系统是非常有必要的。Java中对成员的访问控制分为以下四种
public
所有的类都能访问。在上面例子中,所有的类使用zhangHao.genderDeclare();方法都是可以的。
default
当成员不加任何访问控制类的关键字时,权限为default,当然加default关键字也可以。在上面例子中,class haoHao{}可以被包(类似于文件夹)中所有的成员访问,但包外不可以
1 2 3 4 5 6 7 8
| package friends;
class haoHao{ void playGame(String gameName){ System.out.println("I want to play " + gameName + "with you"); } }
|
1 2 3 4 5 6 7 8
| public class ruiRui{ public static void main(String[] args){ haoHao zhangHao = new haoHao(); zhangHao.playGame("Genshin"); } }
|
这样会报错。要想不报错,需要将包引入
protected
受保护的成员,和default一样,类外也不能访问(例子略)
1 2 3 4 5 6 7 8
| package friends;
public class haoHao{ protected void call(){ System.out.println("guaguagua"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import friends.*; public class sample{ public static void main(String[] args){ haoHao zhangHao = new haoHao(); son zhangSan = new son(); zhangHao.call(); son.call() son.learnFather(); } }
class son extends haoHao{ call(); void learnFather(){ super.call(); } }
|
private
使用方法和public一样简单,只有类内才能访问,但类外不能访问,相当于局部变量。如果一定要获取或改变private,只能通过类内特定的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class haoHao{ private int daoGuan = 0; private int answer = Integer.hashCode(daoGuan); private void daoGuan(){ this.daoGuan++; } public getDaoGuanTimes(){ return answer; } } public class sample{ public static void main(String[] args){ haoHao zhangHao = new haoHao(); System.out.println(zhangHao.daoGuan); System.out.println(zhanghao.getdaoGuanTimes()); } }
|
构造方法
在类中构造一个或数个(数个的情况后面会提)与类名同名的方法,这些方法叫做构造方法,可用于在类的实例的定义时实现部分操作。构造方法没有返回值,用户也不能直接调用,而只能new出来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class haoHao{ private int weight; private int height; public haoHao(int weight, int height){ this.weight = weight; this.height = height; System.out.println("wa! ~~~ a! It turns out I'm " + this.height + " high and weigh " + this.weight + " kg!"); } public void getBirth(){ System.out.println("wa! ~~~ a! It turns out I'm " + this.height + " high and weigh " + this.weight + " kg!"); } }
public class sample{ public static void main(String[] args){ haoHao zhangHao = new haoHao(3,50); zhangHao.getBirth(); } }
|
包
一个工程文件可以存放多个文件夹,称为包。
在包中,需要写明所在包。
1 2 3 4 5 6 7
| package friends;
public class haoHao{ protected void call(){ System.out.println("guaguagua"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import friends.*; public class sample{ public static void main(String[] args){ haoHao zhangHao = new haoHao(); son zhangSan = new son(); son.learnFather(); } }
class son extends haoHao{ call(); void learnFather(){ super.call(); } }
|
在同一工程中,不适用import时,也可以这样
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class sample{ public static void main(String[] args){ haoHao zhangHao = new haoHao(); son zhangSan = new son(); son.learnFather(); } } class son extends friend.haoHao{ call(); void learnFather(){ super.call(); } }
|
引入包的概念后,就可以一整个文件夹复制粘贴了。