java,类、实例化、构造方法、this关键字、方法重载
编写类的步骤:
1、定义类名
2、编写类的属性
3、编写类的方法
public 访问修饰符,表示在整个项目中都可以调用,也可以用其他词
使用class关键字来定义类,如下,定义一个Cat类
给了属性和方法,动态方法是没有static的
public class Cat {
//属性
String ni_chen;
String color;
double weight;
//动态方法
public void run(){
System.out.println("跑");
}
public void eat(){
System.out.println("吃");
}
public void cry(){
System.out.println("叫");
}
//静态方法
public static void slp(){
System.out.println("睡");
}
}
类的实例化:
类名 对象名 = new 类名();
public class Test9 {
public static void main(String[] args){
//类名 对象名 = new 类名();
Cat c1=new Cat();
//引用类的属性,也称实例变量:对象名.属性;
c1.ni_chen="小黑";
c1.color="黑色";
c1.weight=2.2;
System.out.println(c1.ni_chen);
System.out.println(c1.color);
System.out.println(c1.weight);
//实例方法
//引用类的动态方法:对象名.方法名();
c1.run();
c1.eat();
c1.eat();
//引用类的静态方法:类名.方法名();
Cat.slp();
}
}
静态方法,可以直接用 类名.方法名 调用,也可以使用 对象名.方法名。
如果不写static,则是动态方法,必须是 对象名.方法名。
那如果想要在定义类的时候就自动给属性附上只值,而不是实例化后通过 对象名.属性 来赋值,可以在定义类的时候加上构造方法。
构造方法:
是类中的特殊方法,也称构造器(constructor),此方法在实例化的时候被调用。
构造方法书写:方法名和类名一致,不写void
public class Cat {
//属性
String ni_chen;
String color;
double weight;
//构造方法
public Cat(){
System.out.println("构造方法被执行");
ni_chen="小黑";
color="黑色";
weight=2.2;
}
}
新问题又来了,不可能每个实例化的猫的属性都一样
可以给构造函数加入参数,实例化的时候传入不同的参数就行了,这时候构造方法中要使用 this 关键字,表示对象
this关键字:
this在类中表示当前对象,构造方法和其他方法中都可以使用this关键字去调用对象的属性和方法。
public class Cat {
//属性
String ni_chen;
String color;
double weight;
//构造方法
public Cat(String ni_chen, String color, double weight){
System.out.println("构造方法被执行");
this.ni_chen=ni_chen;
this.color=color;
this.weight=weight;
System.out.println(this.ni_chen+"\t"+this.color+"\t"+this.weight);
}
//动态方法
public void run(){
System.out.println(this.ni_chen+"在跑");
}
}
注意,构造方法中的参数可以是其他单词,不一定要和属性名一样。
public class Test9 {
public static void main(String[] args){
//类名 对象名 = new 类名();
Cat c1=new Cat("小黑", "黑色", 2.2);
Cat c2=new Cat("小白", "白色", 2.3);
c1.run();
c2.run();
}
}
构造方法被执行
小黑 黑色 2.2
构造方法被执行
小白 白色 2.3
小黑在跑
小白在跑
方法重载:
如果类中出现多个重名的方法,这些方法参数列表不同,就构成了方法重载。
构造方法和实例方法都能实现重载。
public class Cat {
//属性
String ni_chen;
String color;
double weight;
//构造方法
public Cat(String ni_chen, String color, double weight){
System.out.println("构造方法1被执行");
this.ni_chen=ni_chen;
this.color=color;
this.weight=weight;
System.out.println(this.ni_chen+"\t"+this.color+"\t"+this.weight);
}
//构造方法,方法重载
public Cat(String ni_chen){
System.out.println("构造方法2被执行");
this.ni_chen=ni_chen;
System.out.println(this.ni_chen);
}
//实例方法
public void eat(){
System.out.println(this.ni_chen+"在吃东西");
}
//实例方法,方法重载
public void eat(String sth){
System.out.println(this.ni_chen+"在吃"+sth);
}
}
public class Test9 {
public static void main(String[] args){
//类名 对象名 = new 类名();
Cat c1=new Cat("小黑", "黑色", 2.2);
Cat c3=new Cat("小黄");
c1.eat();
c3.eat("鱼");
}
}
构造方法1被执行
小黑 黑色 2.2
构造方法2被执行
小黄
小黑在吃东西
小黄在吃鱼
可以看到,系统会自动地根据参数的类型和个数,选择合适的方法去执行。
书写方法重载,所给的参数必须不一样。