how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



13分20秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



步骤 1 : UML 图 —— 类之间的关系   
步骤 2 : 解释UML-类图   
步骤 3 : 解释UML-接口图   
步骤 4 : 解释UML-继承关系   
步骤 5 : 解释UML-实现关系   
步骤 6 : 练习-Animal类   
步骤 7 : 答案-Animal类   
步骤 8 : 练习-Spider类   
步骤 9 : 答案-Spider类   
步骤 10 : 练习-Pet接口   
步骤 11 : 答案-Pet接口   
步骤 12 : 练习-Cat类   
步骤 13 : 答案-Cat类   
步骤 14 : 练习-Fish类   
步骤 15 : 答案-Fish类   

步骤 1 :

UML 图 —— 类之间的关系

UML-Universal Module Language
统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系
UML 图 —— 类之间的关系
步骤 2 :

解释UML-类图

解释UML-类图
步骤 3 :

解释UML-接口图

解释UML-接口图
步骤 4 :

解释UML-继承关系

带箭头的实线,表示 Spider,Cat, Fish都继承于Animal这个父类
解释UML-继承关系
步骤 5 :

解释UML-实现关系

表示 Fish实现了 Pet这个接口
解释UML-实现关系
步骤 6 :

练习-Animal类

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
1. 创建Animal类,它是所有动物的抽象父类。
2. 声明一个受保护的整数类型属性legs,它记录动物的腿的数目。
3. 定义一个受保护的构造器,用来初始化legs属性。
4. 声明抽象方法eat。
5. 声明具体方法walk来打印动物是如何行走的(包括腿的数目)。
步骤 7 :

答案-Animal类

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
public abstract class Animal { protected int legs; protected Animal(int legs){ this.legs = legs; } public abstract void eat(); public void walk(){ System.out.println("用 " + legs + " 条腿走路"); } }
public abstract class Animal {

	protected int legs;
	protected Animal(int legs){
		this.legs = legs;
	}
	public abstract void eat();
	public void walk(){
		System.out.println("用 " + legs +  " 条腿走路");
	}
}
步骤 8 :

练习-Spider类

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
1. Spider继承Animal类。
2. 定义默认构造器,它调用父类构造器来指明所有蜘蛛都是8条腿。
3. 实现eat方法
步骤 9 :

答案-Spider类

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
public class Spider extends Animal{ @Override public void eat() { System.out.println("spider eating"); } public Spider(){ super(8); } }
public class Spider extends Animal{

	@Override
	public void eat() {
		System.out.println("spider eating");
	}
	public Spider(){
		super(8);
	}
	
}
步骤 10 :

练习-Pet接口

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
根据UML类创建pet(宠物)接口
1. 提供getName() 返回该宠物的名字
2. 提供setName(String name) 为该宠物命名
3. 提供 play()方法
步骤 11 :

答案-Pet接口

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
public interface Pet { public void setName(String name); public String getName(); public void play(); }
public interface Pet {

	public void setName(String name);
	public String getName();
	public void play();
}
步骤 12 :

练习-Cat类

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
1. 该类必须包含String属性来存宠物的名字。
2. 定义一个构造器,它使用String参数指定猫的名字;该构造器必须调用超类构造器来指明所有的猫都是四条腿。
3. 另定义一个无参的构造器。该构造器调用前一个构造器(用this关键字)并传递一个空字符串作为参数
4. 实现Pet接口方法。
5. 实现eat方法。
步骤 13 :

答案-Cat类

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
public class Cat extends Animal implements Pet{ private String name; public Cat(String name){ super(4); this.name = name; } public Cat(){ this(""); } @Override public void setName(String name) { this.name = name; } @Override public String getName() { // TODO Auto-generated method stub return name; } @Override public void play() { System.out.println("Cat is playing"); } @Override public void eat() { System.out.println("eating"); } }
步骤 14 :

练习-Fish类

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
1. 创建Fish类,它继承Animal类
2. 重写Animal的walk方法以表明鱼不能走且没有腿。
3. 实现Pet接口
4. 无参构造方法
5. 提供一个private 的name属性
步骤 15 :

答案-Fish类

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
public class Fish extends Animal implements Pet{ private String name; protected Fish() { super(0); } @Override public void eat() { System.out.println("Fish is eating"); } public void walk(){ System.out.println("swimming"); } @Override public void setName(String name) { // TODO Auto-generated method stub this.name = name; } @Override public String getName() { // TODO Auto-generated method stub return this.name; } @Override public void play() { // TODO Auto-generated method stub System.out.println("playing"); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-09-06 请问重写方法时@Override可以不写吗
ap0000
重写方法时@Override可以不写吗?不写会报错吗?




2 个答案

人送外号杨大仙 答案时间:2018-09-11
标注最好还是写一下,这样代码看起来比较直观 看到就明白这个方法父类也有,在子类里重写的意思,所以是很好的标识

赢如风 答案时间:2018-09-09
可以不写,只是个标注而已




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2018-08-29 按在地上摩擦~
脑子转不过来



摩擦摩擦~
public abstract class Animal {
	protected String name;
	protected int legs;		//记录动物的腿的数目
	
	public Animal() {
		
	}

	protected Animal(int legs) {
		this.legs = legs;
	}
	
	public abstract void eat();
	
	public void walk() {
		
	}
}
----------------------------------------------------------
public class Spider extends Animal {

	protected Spider() {
		super(8);
	}

	@Override
	public void eat() {
		System.out.println("蜘蛛吃东西~");
	}
	
	public void walk() {
		System.out.println("蜘蛛是用爬的~");
	}
	
	public void play() {
		System.out.println("蜘蛛在玩~");
	}
}
----------------------------------------------------------
public class Cat extends Animal implements Pet{
	private String name;
	
	protected Cat(int legs,String name) {
		super(legs);
		this.name = name;
	}

	public Cat() {
		this(4,"");
	}
	
	@Override
	public void eat() {
		System.out.println("猫吃东西~");
	}

	@Override
	public String getName() {
		return this.name;
	}

	@Override
	public void setName(String name) {
		 this.name = name;
	}

	@Override
	public void Play() {
		System.out.println("猫在玩~");
	}
	
	public void walk() {
		System.out.println(this.name + "是用爬的~");
	}
}
----------------------------------------------------------
public class Fish extends Animal implements Pet {
	private String name;
	
	@Override
	public void eat() {
		System.out.println("鱼吃东西~");
	}
	
	public void walk() {
		System.out.println(this.name + "不能走且没有腿~");
	}

	@Override
	public String getName() {
		return this.name;
	}

	@Override
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void Play() {
		System.out.println("鱼在玩~");
	}
}
----------------------------------------------------------
public interface Pet {
	public String getName();
	public void setName(String name);
	public void Play();
}
----------------------------------------------------------
/**
 * 接口与继承综合练习
 * @author Chen
 * 
 */

/**
 * 1. 创建Animal类,它是所有动物的抽象父类。
 * 2. 声明一个受保护的整数类型属性legs,它记录动物的腿的数目。
 * 3. 定义一个受保护的构造器,用来初始化legs属性。
 * 4. 声明抽象方法eat。
 * 5. 声明具体方法walk来打印动物是如何行走的(包括腿的数目)。
 */

/**
 * 1. Spider继承Animal类。
 * 2. 定义默认构造器,它调用父类构造器来指明所有蜘蛛都是8条腿。
 * 3. 实现eat方法
 */
public class IndexController {
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.setName("猫猫");
		cat.eat();
		cat.Play();
		cat.walk();
		System.out.println(cat.getName() + "有" + cat.legs + "腿\n");
		
		Spider spider = new Spider();
		spider.name ="蛛蛛";
		spider.eat();
		spider.play();
		spider.walk();
		System.out.println(spider.name + "有" + spider.legs + "腿\n");
		
		Fish fish = new Fish();
		fish.setName("鱼鱼");
		fish.eat();
		fish.Play();
		fish.walk();
		System.out.println(fish.getName() + "有" + fish.legs + "腿\n");
	}
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-08-28 这次作业有点多,好好理解~
2018-08-28 这次作业有点多,需要好好敲一敲.
2018-08-27 交作业
2018-08-27 交个作业
2018-08-27 交个作业
2018-08-27 本例中的Cat类中构造函数的设置
2018-08-20 交作业
2018-07-28 构造方法和构造器有什么区别
2018-05-29 关于实现接口的类中属性的设置
2018-05-06 练习
2018-03-28 报错了。。。
2018-01-29 Cat 中关于this.name的问题
2018-01-29 Cat 中关于this.name的问题
2017-11-23 求练习题答案
2017-11-10 super(8);和super.legs=8:有区别吗????
2017-09-08 super和this是不是不能同时使用啊?
2017-08-21 这个综合练习主要表达什么意思呢
2017-08-18 Spider 那個函數裏爲什麽沒有形參?
2017-03-26 this("") 的具体意义
2017-01-18 Fish和Cat的get方法里
2016-12-31 错别字
2016-08-20 错别字
2016-08-01 UML 使用的是什么软件
2016-06-05 怎么没有输出
2016-06-03 fish的getName里的返回为什么要加this




提问之前请登陆
关于 JAVA 基础-接口与继承-综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图