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-Unified 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-10-10 小白提问:是不是在继承父类和实现接口的时候要写上父类和接口的所有的方法才能运行??
熵y
如题




2 个答案

盛夏光年 答案时间:2018-11-07
抽象类中也可以有默认方法

盛夏光年 答案时间:2018-11-07
1.如果父类中含有抽象方法,那么子类必须实现该父类的抽象方法 2.继承接口必须实现接口内的所有方法,若接口中含有default默认方法,则不用实现




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




2018-09-30 接口与继承综合练习作业
DylanTam



楼下都好强啊,学习了。 作业执行结果: 汤姆在吃奶酪。 汤姆在玩杰瑞。 汤姆用腿走路。有4条腿 ============= 猪儿虫在吃虫子。 猪儿虫在荡秋千。 猪儿虫是爬行的。有8条腿。 ============= 小青龙在吃大鱼。 小青龙在天上飞。 小青龙进化后不能走。有0条腿。 =============
/**步骤 6 : 练习-Animal类*/			
			
/**			
 * 1. 创建Animal类,它是所有动物的抽象父类。			
 * 2. 声明一个受保护的整数类型属性legs,它记录动物的腿的数目。			
 * 3. 定义一个受保护的构造器,用来初始化legs属性。			
 * 4. 声明抽象方法eat。			
 * 5. 声明具体方法walk来打印动物是如何行走的(包括腿的数目)。			
 * 			
 */			
			
public abstract class Animal {			
			
	// "#" 表示protected		
	protected int legs;		// 记录动物的腿的数目
			
	// "+" 表示 public		
	protected Animal() {		
		//System.out.println("Animal 的无参构造器!");	
	}		
			
	// 构造方法(构造器)		
	protected Animal(int legs) {		
		this.legs = legs;	
	}		
			
	// 抽象方法		
	public abstract void eat();		
			
	// 普通方法		
	public void walk() {		
		System.out.println("动物是如何行走的(包括腿的数目)。");	
	}		
}			
			
			
 			
/**步骤 8 : 练习-Spider类*/			
 			
/**			
 * 1. Spider继承Animal类。			
 * 2. 定义默认构造器,它调用父类构造器来指明所有蜘蛛都是8条腿。			
 * 3. 实现eat方法					
 */	
		
public class Spider extends Animal {			
    public String name; // 存宠物的名字			
     			
    // 定义默认构造器,它调用父类构造器来指明所有蜘蛛都是8条腿。			
    protected Spider() {			
        super(8);			
    }			
     			
    protected Spider(String name) {			
        this.name = name;			
    }  			
     			
    @Override			
    public void eat() {			
        System.out.println(this.name + "在吃虫子。");			
    }			
     			
    public void play() {			
        System.out.println(this.name +  "在荡秋千。");			
    }      			
     			
    public void walk() {			
        System.out.println(this.name + "是爬行的。" + "有" + this.legs + "腿。\n");			
    }			
      			
}			
 					
/**步骤 10 : 练习-Pet接口*/			
/**			
 * 根据UML类创建pet(宠物)接口			
 * 1. 提供getName() 返回该宠物的名字			
 * 2. 提供setName(String name) 为该宠物命名			
 * 3. 提供 play()方法			
 *			
 */			
 			
public interface Pet {			
     			
    // 返回String			
    public String getName();			
     			
    // String类型的参数			
    public void setName(String name);			
     			
    public void play();			
}			
 					
/**步骤 12 : 练习-Cat类*/			
/**			
 * 1. 该类必须包含String属性来存宠物的名字。			
 * 2. 定义一个构造器,它使用String参数指定猫的名字;该构造器必须调用超类构造器来指明所有的猫都是四条腿。			
 * 3. 另定义一个无参的构造器。该构造器调用前一个构造器(用this关键字)并传递一个空字符串作为参数。			
 * 4. 实现Pet接口方法。			
 * 5. 实现eat方法。					
 */			
 			
public class Cat extends Animal implements Pet {			
    private String name;    // 存宠物的名字			
     			
    protected Cat(String name) {			
        super(4);			
        this.name = name;			
    }			
     			
    protected Cat() {			
        this("");			
    }  			
     			
    // 实现eat方法。			
    @Override			
    public void eat() {			
        System.out.println(this.name + "在吃奶酪。");			
    }			
     			
    //4. 实现Pet接口方法。			
    @Override			
    public String getName() {			
        return this.name;			
    }			
     			
    @Override			
    public void setName(String name) {			
        this.name = name;			
    }			
     			
    @Override			
    public void play() {			
        System.out.println(this.name + "在玩杰瑞。");			
    }  			
     			
    public void walk() {			
        System.out.println(this.name + "是用腿走路。"  + "有" + this.legs + "腿\n");			
    }   			
}				
 			
/**步骤 14 : 练习-Fish类*/			
/**			
 * 1. 创建Fish类,它继承Animal类。			
 * 2. 重写Animal的walk方法以表明鱼不能走且没有腿。			
 * 3. 实现Pet接口			
 * 4. 无参构造方法			
 * 5. 提供一个private 的name属性			
 *			
 */			
 			
public class Fish extends Animal implements Pet {			
    private String name;    // 存宠物的名字			
     			
    // 无参构造方法			
    protected Fish() {			
        //super(0);			
    }			
     			
    @Override			
    public void eat() {			
        System.out.println(this.name + "在吃大鱼。");			
    }			
     			
    @Override			
    public void walk() {			
        System.out.println(this.name + "进化后不能走。"  + "有" + this.legs + "腿。\n");			
    }			
     			
    @Override			
    public String getName() {			
        return this.name;			
    }			
     			
    @Override			
    public void setName(String name) {			
        this.name = name;			
    }			
     			
    @Override			
    public void play() {			
        System.out.println(this.name + "在天上飞。");			
    }			
}  			
 			
 			
public class InterfaceExtends {			
    public static void main(String[] args) {			
        Cat cat = new Cat("汤姆");			
        cat.setName("汤姆");			
        cat.eat();			
        cat.play();			
        cat.walk();			
        System.out.println("=============\n");			
         			
        Spider spider = new Spider("猪儿虫");			
        //spider.name = "猪儿虫";			
        spider.eat();			
        spider.play();			
        spider.walk();			
        System.out.println("=============\n");			
         			
        Fish fish = new Fish();			
        fish.setName("小青龙");			
        fish.eat();			
        fish.play();			
        fish.walk();			
        System.out.println("=============\n");     			
    }			
}			
			
			
			
			
			
			
			
			
			
			
			

							






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





2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-30 接口与继承综合练习作业
2018-09-06 请问重写方法时@Override可以不写吗
2018-08-29 按在地上摩擦~
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群交流: 902680467
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图