头歌平台Java实验:Java面向对象 - 封装、继承和多态
以下是个人的答案,欢迎指错以及交流
第1关:什么是封装,如何使用封装
封装:
就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员进行更精确的控制。
- 隐藏信息,实现细节。
封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
编程要求
根据提示,在右侧编辑器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.setName("张三");
p.setAge(18);
p.talk();
// 给p中的属性赋值
// 调用Person类中的talk()方法
/********* end *********/
}
}
// 在这里定义Person类
class Person {
/********* begin *********/
//封装操作,将需要封装的用private修饰,用get与set对外提供方法访问
//在编辑器中,可右键点击Generate选择进行操作
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void talk(){
System.out.println("我是:"+getName()+','+"今年:"+getAge()+"岁");
}
/********* end *********/
}
第2关:什么是继承,怎样使用继承
继承的关键字:extends
-
子类拥有父类非
private
的属性和方法; -
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
-
子类可以用自己的方式实现父类的方法;
-
在
Java
中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是Java
中却允许多层继承,多层继承就是,例如类C
继承类B
,类B
继承类A
,所以按照关系就是类A
是类B
的父类,类B
是类C
的父类,这是Java
继承区别于C++
继承的一个特性; -
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码:
-
声明一个
Animal
类,将属性name
和age
封装起来,提供对外的公共访问方法; -
声明一个
Cat
类和Dog
类,都继承Animal
类,分别定义各自的voice
方法和eat
方法; -
在
main
方法中分别实例化一个Cat
对象和Dog
对象,设置各自的属性并调用这两个方法,再打印出名字和年龄信息; -
具体具体输出要求请看测试说明。
测试说明
测试输入:无
预期输出: 大花猫喵喵叫
大花猫吃鱼
大花猫6岁
大黑狗汪汪叫
大黑狗吃骨头
大黑狗8岁
packag