面向对象基础练习

练习题

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;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值