一直对面向对象编程的概念较模糊,今天认真理了一遍,按要求写了容易理解的小程序模板(PS:内容不重要,关键是面向对象的思想,层次等。)
1. 要求
- 要求此人类必须包含有人的姓名、性别、出生日期等基本属性(变量)。
- 要求此人类描述吃饭的方法(函数)和描述睡觉的方法(函数)。例如睡觉方法的执行体为一个 System.out.println() 函数,此函数输出一段例如“ xx(姓名)往床上躺倒,不久就睡着了……”之类的描述睡觉的文本。
- 要求此人类的构造函数要具有无参数的构造函数,以及带有姓名、性别、出生日期等参数的构造函数,并在构造函数中输出一段描述xx(姓名)出生的文本。
- 实例化出张三和李四两个人类对象(变量),并为之赋初值。
- 调用张三、李四等人类对象的各种属性(类成员变量)和方法(函数)。
- 在上述人类的基础上派生一个继承自人类的新的学生类,加入学号等学生特有的属性,加入上课、考试等方法,并实例化一个或几个学生类对象,完成这些学生类对象的各种属性和方法的调用。
2. 代码
package ObjectOriented;
//定义类
class Person {
String name;//声明字段name
String brithday;//声明段brithday
int age;//声明字段age
Person(){//定义无参构造函数,无返回值定义,方法与类同名。
//初始化
name = "张三";
age = 20;
brithday = "1月1日";
System.out.println("");
}
Person(String newName,int newAge,String newBrithday){//重写一个带参数构造函数,无返回值定义,方法与类同名。
name = newName;//name为对象的属性,newName为函数形参。
age = newAge;
brithday = newBrithday;
//也可以写成以下形式
/*
this.name=name;//前一个name为对象的属性,有this指定,因为在本类中可直接访问,后一个name为函数形参。
this.age=age;//前一个age为对象的字段,有this指定,后一个age为函数形参。
this.brithday=brithday;
*/
}
void sleep() {//定义无参数的sleep方法
System.out.println(name+"往床上躺倒,不久就睡着了。");
}
//定义带参数的sleep方法,实现方法重载
public void sleep(String a) {//定义带参数的sleep方法,实现方法重载
System.out.println(name+"往床上躺倒,不久就睡着了。"+a);
}
}
class Student extends Person {//继承,Studeent为子类,Person为父类
int xuehao;//声明字段xuehao
//定义无参构造函数,无返回值定义,方法与子类同名。
Student(){
}
//重写一个带参数构造函数,无返回值定义,方法与子类同名。
Student(int xuehao){
this.xuehao = xuehao;
}
void attendClass() {//定义上课方法
System.out.println("上课");
}
void exam() {//定义考试方法
System.out.println("考试");
}
}
//使用类创建对象
public class TestPerson {
public static void main(String[] args) {
//调用类的无参构造函数,使用new操作符从构造方法创建一个对象
Person person1 = new Person();
System.out.println(person1.name + "今年" + person1.age + "岁,生日是" + person1.brithday + "," );
person1.sleep();
Person person2 = new Person();
person2.name = "李四";
person2.age = 21;
person2.brithday = "1月2日";
System.out.println(person2.name + "今年" + person2.age + "岁,生日是" + person2.brithday + "," );
person2.sleep("进入了梦乡。");
Student student1 = new Student();
student1.name = "王五";//变量继承
student1.age = 19;
student1.brithday = "1月3日";
System.out.println(student1.name + "今年" + student1.age + "岁,生日是" + student1.brithday + "," );
student1.sleep();//方法继承,父类方法
System.out.println("第二天又要");
student1.attendClass();//子类方法
System.out.print("又要");
student1.exam();//子类方法
}
}