类和对象
一般来说,类包括以下内容:
1、修饰符,例如public、private、protected。
2、类名:类名的首字母管用大写。
3、类的继承用extends来实现。Java类职能单继承,即子类只能继承一个父类(extends后面只能有一个父类)
4、关键字implements用来实现接口。一个类可以实现多个接口。(implements后面可以出现多个接口,且接口之间用逗号隔开)
5、类体,用大括号 {} 括起来。
下面创建一个简单的类:
class Person{
private String name;
private int age;
}
以上创建的一个简单的类,其中包含类的基本属性
构造函数:
有参构造和无参构造
构造函数名和类名相同且没有返回值类型,不需要返回值。
每个类中都会有一个默认无参构造函数且创建对象时都会调用无参构造函数,如果自己定义了构造函数那么这个默认构造函数将失效,如继续使用无参构造则需要重新定义。
创建对象时默认调用无参构造函数如下示例:
package study;
public class Test {
public static void main(String[] args) {
Person p=new Person();//创建Person对象p,创建p对象时就调用了public Person();
}
}
class Person{
public Person() {
System.out.println("hello world!");
}
}
运行结果:
hello world!
有参构造函数的使用:
当new一个对象的时候可以给其相应的参数,从而给对象赋初值,相当于调用类中的setter方法,使用方法如下:
package study;
public class Test {
public static void main(String[] args) {
Person p=new Person("张三",18);//创建对象并给其相对应的初值
p.show();//调用show()函数输出对象p的值
}
}
class Person{
private String name;
private int age;
public Person(String name,int age) {//有参构造函数
this.name=name;
this.age=age;
}
public void show() {//输出对象值
System.out.println(name+"\n"+age);
}
}
运行结果:
张三
18
用此种方法给对象赋初值后其属性值不可用同种方式改变,只能通过setter方法对其值进行修改,使用方法如下:
package study;
public class Test {
public static void main(String[] args) {
Person p=new Person("张三",18);
p.show();
//Person p=new Person("李四",19);此种方法报错
p.setName("王五");
p.setAge(19);
p.show();
}
}
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public void show() {
System.out.println(name+"\n"+age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
张三
18
王五
19
子类所有的构造函数 默认先调用父类的无参构造函数,如父类中变量的数据类型为private,则子类无法直接访问,需要父类使用get方法来调用私有变量。代码如下:
package study;
public class Test {
public static void main(String[] args) {
// Person p=new Person("张三",18);
// p.show();
//Person p=new Person("李四",19);此种方法报错
// p.setName("王五");
// p.setAge(19);
// p.show();
Li l=new Li();
}
}
class Li extends Person{//子类
public Li() {//子类无参构造
}
}
class Person{//父类
private String name;
private int age;
public Person(){//父类无参构造
System.out.println("父类无参构造");
}
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public void show() {
System.out.println(name+"\n"+age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
父类无参构造