课后习题练习
- 什么是封装,如何使用封装?
- 什么是继承,怎样使用继承?
- super关键字的使用
- 方法的重写与重载
- 抽象类
- final关键字的理解与使用
- 接口
- 什么是多态,怎么使用多态
面向对象的三个基本特征是:封装、继承和多态。
封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类)。封装和继承的目的都是:代码重用。而多态则是为了实现另一个目的 —— 接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
第一题:
任务描述 --本关任务:构造一个类,把对象的属性封装起来,同时提供一些可以被外界访问属性的方法。
什么是封装 !!!
封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。 封装时的权限控制符区别如下:
封装的意义 !!!
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:(1)良好的封装能够减少耦合。
(2)类内部的结构可以自由修改。
(3)可以对成员进行更精确的控制。
(4)隐藏信息,实现细节。
封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
#####实现Java封装的步骤
1.修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {
private String name;
private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2.对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
/*
*封装演示
*/
public class Person {
/*
* 对属性的封装 一个人的姓名、性别和年龄都是这个人的私有属性
*/
private String name;
private String sex;
private int age;
/*
* setter()、getter()是该对象对外开放的接口
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String
name)中的name变量)之间发生的同名的冲突。
3.封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码,就可以对成员变量进行更精确的控制。
public void setAge(int age) {
if (age > 120) {
System.out.println("ERROR:error age input...."); // 提示错误信息
} else {
this.age = age;
}
}
public String getSexName() {
if ("0".equals(sex)) {
sexName = "女";
} else if ("1".equals(sex)) {
sexName = "男";
} else {
sexName = "人妖";
}
return sexName;
}
编程要求 根据提示,在右侧编辑器Begin-End处补充代码:
声明一个Person类,私有化属性name和age,并将字段封装起来;
在Person类中定义一个talk()方法,打印姓名和年龄信息;
在main方法中声明并实例化一Person对象p,给p中的属性赋值,调用talk()方法打印 我是:张三,今年:18岁。
测试输入: 无
预期输出: 我是:张三,今年:18岁
代码:
package case1;
public class TestPersonDemo {
public static void main(String[] args) {
/********* begin *********/
// 声明并实例化一Person对象p
Person p=new Person();
// 给p中的属性赋值
p.setName("张三");
p.setAge(18);
// 调用Person类中的talk()方法
p.talk();
/********* end *********/
}
}
// 在这里定义Person类
class Person {
/********* begin *********/
private String Sname;
private int Sage;
public String getName(){
return Sname;
}
public void setName(String Sname){
this.Sname=Sname;
}
public int getAge(){
return Sage;
}
public void setAge(int Sage){
this.Sage=Sage;
}
public void talk(){
System.out.println("我是:"+Sname+','+"今年:"+Sage+"岁");
}
/********* end *********/
}
在CSDN看到了很多大佬的笔记心得,做题经验,在自己做题时也得到了很多帮助,所以想记录自己的学习,小白周周练习一点点,希望慢慢进步!冲鸭!!!