练习题
1、面向对象编程语言的基本特征是什么
- 封装、继承、多态
- 分别解释
- 抽象
2、设计一个包含多个构造器的类,并分别用这些构造函数实例化对象
package com.liu;
public class A {
public A() {}
A c=new A();
public A(int a) {}
A d=new A(123);
public A(String k) {}
A a=new A("刘");
public A(int k1,String k2) {}
A z=new A(123,"刘");
public A(String k1,int k2) {}
A s=new A("刘",123);
}
3、Java语言中,成员变量与局部变量有什么区别
- 成员变量定义在类中,整个类中都能访问,和具体的定义位置无关
- 局部变量定义在方法、语句、局部代码块中,只在所属的区域中有效,而且必须是先定义后使用,必须是先赋初值后使用
- 成员变量存在于堆内存的对象中,堆内存中的对象大小可以任意,并允许在运行时进行调整。所以访问查找的效率比较低
- 局部变量存在与栈内存的方法中,可以快速定位,但是大小是限定的
- 成员变量随着对象的创建而存在,随着对象的表示而消失。局部变量随着所属区域的执行而存在,随着所属区域的结束而释放
- 成员变量都有默认初始化值;局部变量没有默认初始化值
4、面向过程程序设计的核心 - 程序
- 核心是算法
- 解释算法
- 面向过程:自顶向下、逐步求精、模块化
5、面向对象技术中的对象三个基本属性 - 状态
- 行为
- 标识
6、编写一个Cal1类实现加减两种运算,然后编写另一个Cal2类实现乘除两种运算
package com.liu;
public class Cal1 {
//n1,n2,add,sub
private int n1,n2;
public long add() {
return 0L+n1+n2;
}
public long sub() {
return 0L+n1-n2;
}
public int getN1() {
return n1;
}
public void setN1(int n1) {
this.n1 = n1;
}
public int getN2() {
return n2;
}
public void setN2(int n2) {
this.n2 = n2;
}
public static void main(String[] args) {
Cal1 aa=new Cal1();
aa.setN1(60);
aa.setN2(30);
long res=aa.add();
long rea=aa.sub();
System.out.println("和:"+res+"差:"+rea);
}
}
package com.liu;
public class Cal2 extends Cal1 {
public double nul() {
return 1. * getN1() * getN2();
}
public double div() {
if(getN2()!=0)
return 1.*getN1()/getN2();
else
return Double.POSITIVE_INFINITY;
}
public static void main(String[] args) {
Cal2 aa=new Cal2();
aa.setN1(20);
aa.setN2(5);
double res=aa.nul();
double ree=aa.div();
System.out.println("乘积:"+res+"商:"+ree);
}
}
7、建立3个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据,官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入
输出的功能
package com.liu;
import java.sql.Date;
public class Resident {
private String idCard;
private String name;
private Date birth;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
if(idCard!=null && idCard.trim().length()==18)
this.idCard = idCard;
else
throw new RuntimeException("身份证号码不合法!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
package com.liu;
public class Adult extends Resident {
private String education;
private String vocation;
public String getEducation() {
return education;
}
public void setEducation(String education) {
this.education = education;
}
public String getVocation() {
return vocation;
}
public void setVocation(String vocation) {
this.vocation = vocation;
}
}
package com.liu;
public class Officer extends Adult {
private String party;
private String duties;
public String getParty() {
return party;
}
public void setParty(String party) {
this.party = party;
}
public String getDuties() {
return duties;
}
public void setDuties(String duties) {
this.duties = duties;
}
}
8、编写一个控制台应用程序,完成下列功能,并回答提出的问题
- 创建一个类A,在构造函数中输出“A”,再创建一个类B,再构造函数中输出“B”
- 从A继承一个名为C的新类,并在C中创建一个成员变量B,不要为C创建构造函数
- 在main方法中创建类C的一个对象,写出运行程序后输出的结果
- 如果在C中也创建一个构造函数输出"C",整个程序运行的结果是什么
package com.liu;
public class A {
public A(){
System.out.println("A");
}
}
package com.liu;
public class B {
public B () {
System.out.println("B");
}
}
package com.liu;
public class C extends A{
private int B;
public C() {
System.out.println("C");
}
}
package com.liu;
public class D {
public static void main(String[] args) {
C aa=new C();
}
}
9、创建一个类,它存储一个int数据成员,当该数据成员被存储时将其乘以100,当其被读取时将其除以100
package com.liu;
public class Int {
private int data;
public void setData(int data) {
if(data<=Integer.MAX_VALUE/100)
this.data=data*100;
else
throw new RuntimeException("数据太大了");
}
public int getData() {
return this.data/100;
}
}
10、定义学生类,包括属性:学号、班号、姓名、年龄、性别,要求用无参构造,定义方法获取学号、班号、姓名、年龄(只能小于100岁,大于1,否则重新输入)、性别(只能男或者女,否则重新输入),最后在主函数输出对一个学生对象赋值的信息
package com.liu;
public class Student {
private int studentID;
private int classID;
private String name;
private int age;
private char sex;
public int getStudentID() {
return studentID;
}
public void setStudentID(int studentId) {
this.studentID = studentId;
}
public int getClassID() {
return classID;
}
public void setClassID(int classID) {
this.classID = classID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 1 && age < 100)
this.age = age;
else
throw new RuntimeException("输入年龄:大于1,小于100");
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
if (sex == '男' || sex == '女')
this.sex = sex;
else
throw new RuntimeException("只能男或者女");
}
public static void main(String[] args) {
Student aa = new Student();
aa.setStudentID(123456);
aa.setClassID(1234);
aa.setName("某某");
aa.setAge(20);
aa.setSex('男');
System.out.println(aa.xinxi());
}
public String xinxi() {
return "学号:"+studentID+"班号:"+classID+"姓名:"+name+"年龄:"+age+"性别:"+sex;
}
}
11、定义人类Person,
字段:身份证号idCard,姓名name,性别gender,年龄age,职业profession,联系方式phone。并定义相应的属性; 定义函数message()输出个人的基本信息 定义默认的构造函数,并打印一句话,输出“我是人类”。
package com.liu;
public class Person {
private String idCard;
private String name;
private char gender;
private int age;
private String profession;
private String phone;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public static void main(String[] args) {
Person aa=new Person();
aa.setAge(20);
aa.setGender('男');
aa.setIdCard("123456789123456789");
aa.setName("某某");
aa.setPhone("12345678900");
aa.setProfession("公务员");
System.out.println(aa.message());
}
public String message() {
return "身份证号:"+idCard+"姓名:"+name+"性别:"+gender+"年龄:"+age+"职业:"+profession+"电话:"+phone;
}
}
12,定义一个教师类Teacher,派生于人类; a)具有字段:职工号wordID,所教授的课程名curriculum,所属院系academy,并定义相应的属性 b)重写构造函数。 c)定义一个普通方法teach(),输出我是教学的。
package Thursday;
//定义一个教师类Teacher,派生于人类; a)具有字段:职工号wordID,所教授的课程名curriculum,所属院系academy,并定义相应的属性 b)
//重写构造函数。 c)定义一个普通方法teach(),输出我是教学的。
public class Teacher extends Person {
private String wordID;
private String curriculum;
private String academy;
public static void main(String[] args) {
Teacher t=new Teacher();
Person p=new Person();
t.setWordID("10101");
t.setCurriculum("语文课");
t.setAcademy("工程院");
p.getAge();
p.getGender();
p.getName();
p.getPhone();
p.getProfession();
System.out.println(t.teach());
}
public String teach() {
return "我是教"+curriculum+"的";
}
public String getWordID() {
return wordID;
}
public void setWordID(String wordID) {
this.wordID = wordID;
}
public String getCurriculum() {
return curriculum;
}
public void setCurriculum(String curriculum) {
this.curriculum = curriculum;
}
public String getAcademy() {
return academy;
}
public void setAcademy(String academy) {
this.academy = academy;
}
}