面向对象编程
方法:
表示了对象具有的行为,主要包括两个部分:方法头和方法体
方法头:访问修饰符 返回值类型 方法名(形参)
方法体:{}
可以把方法简单理解为菜谱
面向对象三大特性
(1) 封装
(2) 继承
(3) 多态
一. 封装
研究对象的 属性
姓名 品种 健康值 亲密度
方法
自述{}
public class Dog{
String name;
String strain;
int health;
int love;
/**
*狗狗的构造方法 没有返回值 | 企鹅 静态常量static final String=SEX_MALE=”Q仔”;
* 构造方法名与类名相同 | static:方法里不可以定义static变量只能在类里
*/
public Dog(){ //可以指定参数
health=60; //初始化代码
love=60;
}
public void showSelf(){
System.out.println(“我是一只来自北方的”+strain+“狗”);
System.out.println(“我的名字叫”+name);
System.out.println(“健康值是:”+health);
System.out.println(“与主人的亲密度:”+love);
}
}
/**
*领养宠物
*/
public class PetAdopt{
public static void main(String[] args){
System.out.println(“欢迎来到宠物店”);
System.out.println(“请输入要领养的宠物名:”);
Scanner input=new Scanner(System.in);
String name=input.next();
System.out.println(“请输入要领养的宠物类型:1.狗狗2.企鹅”);
int petType=input.nextInt();
if(petType==1){
Dog dog=new Dog();
System.out.println(“请输入要领养的狗狗品种:1.拉布拉多2.雪纳瑞”);
int dogType=input.nextInt();
if(dogType==1){
dog.strain=”聪明的拉布拉多”;
}else if(dogType==2){
dog.strain=”酷酷的雪纳瑞”;
}
dog.name=name;
/*dog.health=60;
dog.love=60;*/
...
1.给定如下Java代码,下列( C )方法可以加入到Sample类中,并且能够编译正确。
public class Sample {
public int getSomething(int d) {
return d;
}
}
A.private int getSomething(int i, String s) {}
B.public void getSomething(int i) {}
C.private int getSomething(int i, String s) {return 20;}
C.public double getSomething() {return “abc”;}
2.给定如下Java代码,编译运行,结果将是( B )。
public class Sample {
private int x;
public Sample() {
x = 1;
}
public void Sample (double f) {
this.x = (int) f;
}
public int getX() {
return x;
}
public static void main(String[] args) {
Sample s = new Sample(5.2);
System.out.pringln(s.getX());
}
}
A.发生编译期错误,编译器提示:出现重复地方法Sample
B.发生编译期错误,编译器提示:未定义构造方法Sample(double)
C.正常运行,输出结果:5.2
D.正常运行,输出结果:53.给定如下Java代码,编译运行,结果将是(A )。
public class Sample {
public double result(double d1, double d2) {
return d1 < d2 ? d1:d2;
}
public double result(int d1, double d2) {
return d1 > d2 ? d1:d2;
}
public int result(int d1, int d2) {
return d1 - d2;
}
private int resule(int i) {
return i;
}
public static void main(String[] args)
Sample s = new Sample();
System.out.print(s.result(2 , 3.0) + “ , “);
System.out.print(s.result(4.0 , 4.5) + “ , “);
System.out.print(s.result(10 , 9));
}
}
A.3.0 , 4.0 , 1
B.2 , 4.0 , 1
C.3.0 , 4.5 , 1
D.-1 , 4.0 ,1
4.构成方法重载的要素不包括( A B )。
A.方法名与类名相同
B.返回类型不同
C.参数列表不同
D.在同一个类中5.在如下所示的Sample类中,共有( C )个构造方法。
public class Sample {
private int x;
private Sample() {
x = 1;
}
public void Sample(double f) {
this.x = (int)f;
}
public Sample(String s){
}
}
A.4
B.3
C.2
D.11. 请指出下面代码中存在的错误,并什么错误原因。
class Teacher1 {
public Teacher1() {
}
}
class Teacher2 {
public void Teacher2(String name) {
}
}
public class TeacherTest {
public static void main(String[] args) {
Teacher1 t1 = new Teacher1();
Teacher2 t2 = new Teacher2(“Mr lee”);
}
}Teacher2是类名 是构造方法(函数) 没有返回值 去掉void
2. 编写一个类Student1,代表学员,要求如下。
Ø 具有属性:姓名、年龄,其中年龄不能小于16岁,否则输出错误信息。
Ø 具有方法:自我介绍,负责输出该学员的姓名、年龄。
编写测试类Student1Test进行测试,看是否符合需求。
——提示———————————————————————————————————
Ø 在学员类的SetAge()方法中验证年龄大小。
Ø 在测试类中分别测试学员年龄小于16岁、大于16岁时的输出结果。
———————————————————————————————————————
3. 请指出下面代码中存在的错误,并说明错误原因。
public class Sample {
public void amethod(int i, String s) { }
public void amethod(String s, int i) { }
public int amethod(String s1, String s2) { }
private void amethod(int i, String mystring) { }
public void Amethod(int i, String s) { }
private void amethod(int i);
}
第一行rename amethod第三行 change return type to void
第六行 add body
4. 编写一个类Student2,代表学员,要求如下。
Ø 具有属性:姓名、年龄、性别和专业。
Ø 具有方法:自我介绍,负责输出该学员的姓名、年龄、性别以及专业。
Ø 具有两个带参构造方法:第一个构造方法中,设置学员的性别为男,专业为LE,其余属性的值由参数给定;第二个构造方法中,所有属性的值都由参数给定。
编写测试类Student2Test进行测试,分别以两种方式完成对两个Student2对象的测试化工作,并分别调用它们的自我介绍方法,看看输出结果是否正确。
——提示———————————————————————————————————
在学员类中定义两个构造方法完成初始化工作。
public Student2(String name, int age) {}
public Student2(String name,int age, String sex, String subject) {}
———————————————————————————————————————5. 简述类的封装的定义、具体步骤和好处。
定义:隐藏类的一些具体实现,通过提供一些接口来实现一些功能,将类的状态信息隐藏在类的外部,不允许在类的外部直接访问,而是通过这个类提供的一些方法来对属性进行操作以及访问。
步骤:修改属性的可见性来限制对属性的访问;为每个属性创建一对赋值; (setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。
好处:(1)控制存取属性值的语句来避免对数据的不合理的操作
(2)一个封装好的类,是非常容易使用的
(3)代码更加模块化,增强可读性
(4)隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据