java面向对象--封装、继承和多态

课后习题练习

  1. 什么是封装,如何使用封装?
  2. 什么是继承,怎样使用继承?
  3. super关键字的使用
  4. 方法的重写与重载
  5. 抽象类
  6. final关键字的理解与使用
  7. 接口
  8. 什么是多态,怎么使用多态

面向对象的三个基本特征是:封装、继承和多态。

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类)。封装和继承的目的都是:代码重用。而多态则是为了实现另一个目的 —— 接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

第一题:

任务描述 --本关任务:构造一个类,把对象的属性封装起来,同时提供一些可以被外界访问属性的方法。

什么是封装 !!!
封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。 封装时的权限控制符区别如下:

封装的意义 !!!
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:

(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看到了很多大佬的笔记心得,做题经验,在自己做题时也得到了很多帮助,所以想记录自己的学习,小白周周练习一点点,希望慢慢进步!冲鸭!!!

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年游四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值