我是靠谱客的博主 殷勤鸭子,最近开发中收集的这篇文章主要介绍2019寒假java作业02,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

面向对象(二)综合作业

基础知识:

  1. 编写程序测试子类能从父类继承哪些成员变量和方法。
  • 子类继承父类的成员变量:当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

    1. 能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
    2. 对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
    3. 对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
  • 子类继承父类的方法: 同样地,子类也并不是完全继承父类的所有方法。

    1. 能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
    2. 对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
    3. 对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
  • 注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

    package homework02;
    
    public class Person {
    		// 名字
    		protected String name;
    		// 编号
    		protected int id;
    		// 工作环境
    		protected String environment;
    		// 特长
    		protected String speciality;
    		
    		public Person(String name, int id, String environment, String speciality) {
    			super();
    			this.name = name;
    			this.id = id;
    			this.environment = environment;
    			this.speciality = speciality;
    		}
    		
    		
    		//工作地点
    		public void work() {
    			System.out.println(name + "在" + environment + "工作" + '。');
    		}
    	 
    		//工作能力
    		public void ability() {
    			System.out.println(name + ",我会" + speciality + '。');
    		}
    	 
    		//自我介绍
    		public void introduction() {
    			System.out.println("大家好!我是" + id + "号" + name + '。');
    		}
    	
    }
    
    package homework02;
    
    public class Doctor extends Person {
    
    	public Doctor(String name, int id, String environment, String speciality) {
    		super(name, id, environment, speciality);
    		
    	}
    	public void duty(){
    		System.out.println("治病救人是我的职责。");
    	}
    }
    
    
    package homework02;
    
    public class Run {
    
    	public static void main(String[] args) {
    		// 医生张三
    		Doctor doctor = new Doctor("张三", 1, "医院", "诊断");
    		// 张三的自我介绍
    		doctor.introduction();
    		// 张三的工作地点
    		doctor.work();
    		// 张三的能力
    		doctor.ability();
    		// 张三的职责
    		doctor.duty();
    		
    	}
    }
    
    

    运行结果:

    大家好!我是1号张三。
    张三在医院工作。
    张三,我会诊断。
    治病救人是我的职责。
    
  1. 什么是重写(override)?为什么要重写,编写代码测试。
  • 重写:如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。

  • 语法规则:返回值类型,方法名,参数类型及个数都要与父类继承的方法相同。

    package homework02;
    
    public class Doctor extends Person {
    
    	public Doctor(String name, int id, String environment, String speciality) {
    		super(name, id, environment, speciality);
    		
    	}
    	//重写自我介绍
    	public void introduction() {
    		System.out.println("大家好!我是一名医生");
    	}
    	public void duty(){
    		System.out.println("治病救人是我的职责。");
    	}
    }
    

    运行结果:

    大家好!我是一名医生
    张三在医院工作。
    张三,我会诊断。
    治病救人是我的职责。	
    
  1. Super关键字的作用是什么?编写代码测试。
  • 在对象的内部使用,可以代表父类对象

    1. 访问父类的属性 super.age
    2. 访问父类的方法 super.eat()
    1. 子类的构造的过程中必须调用其父类的构造方法
    2. super(parameter1,parameter2…)
    package com.imooc;
    
    public class Animal{
    	public Animal() {
    		System.out.println("Animal类执行了!!");
    	}
    }
    
    package com.imooc;
    
    public class Dog extends Animal {
    	 public Dog() {
    		 //默认隐式的调用父类构造方法
    		 //super();写与不写效果一样
    		 /*要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。
    		 如果子类构造方法中既没有显示的调用父类的构造方法,
    		 而父类又没有无参的构造方法,则编译出错。*/
    		 System.out.println("Dog类执行了!!");
    	 }
    }
    
    package com.imooc;
    
    public class T {
    	public static void main(String[] args) {
    
    		Dog dog = new Dog();
    	}
    
    }
    
    

    运行结果:

    Animal类执行了!!
    Dog类执行了!!
    
  • 第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类

  • 要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。如果子类构造方法中既没有显示的调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

  1. Final关键字可以修饰类,方法,成员变量和局部变量,请编码测试。
    final修饰类,则该类不允许被继承
    final修饰方法,则该方法不允许被覆盖(重写)
    final修饰属性,类的初始化属性必须有值或在构造方法中赋值(但只能选其一)。
    final修饰变量,则该变量的值只能赋一次值,即为常量。
  2. 抽象方法的概念,什么是抽象类,为什么抽象类不能实例化,编码测试。
  • 抽象方法:抽象方法指一些只有方法声明,而没有具体方法体的方法。抽象方法一般存在于抽象类或接口中。

  • 应用场景:

    1. 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
    2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
  • 作用:限制规定子类必须实现某些方法,但不关注实现细节

  • 使用规则

    1. abstract定义抽象类
    2. abstract定义抽象方法,只有声明,不需要实现
    3. 包含抽象方法的类是抽象类
    4. 抽象类中可以包含普通的方法,也可以没有抽象方法
    5. 抽象类不能直接创建,可以定义引用变量
    package com.imooc.my;
    
    //这就是一个抽象类
    abstract class Telphone {
     
    	//定义成抽象方法,来解决父类方法的不确定性。
    	//抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
    	abstract void call();
    	abstract void messages();
    }
    
    
    package com.imooc.my;
    
    public class CellPhone extends Telphone {
    
    	@Override
    	public void call() {
    		// TODO Auto-generated method stub
    		System.out.println("通过键盘来打电话");
    	}
    
    	@Override
    	public void message() {
    		// TODO Auto-generated method stub
    		System.out.println("通过键盘来发短信");
    	}
    
    }
    
    package com.imooc.my;
    
    public class SmartPhone extends Telphone {
    
    	@Override
    	public void call() {
    		// TODO Auto-generated method stub
    		System.out.println("通过语音来打电话");
    	}
    
    	@Override
    	public void message() {
    		// TODO Auto-generated method stub
    		System.out.println("通过语音来发短信");
    	}
    
    }
    
    package com.imooc.my;
    
    public class T {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Telphone tel1 = new CellPhone();
    		tel1.call();
    		tel1.message();
    		Telphone tel2 = new SmartPhone();
    		tel2.call();
    		tel2.message();
    		
    	}
    
    }
    

    运行结果:

    通过键盘来打电话
    通过键盘来发短信
    通过语音来打电话
    通过语音来发短信
    
  1. 接口的概念及特点,编程测试。
  • 接口概念
    类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。接口中全部是抽象方法。

  • 接口定义的基本语法:

    [修饰符](abstract隐式写着)interface 接口名[extends 父接口1,父接口2…]{
    零个到多个常量定义…
    零个到多个抽象方法的定义…
    }
    
  • 接口就是用来被继承、被实现的,修饰符一般建议用public

  • 注意:接口中方法不能有方法体,同时方法的访问修饰符不能是 private 和 protected
    常量:接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。
    方法:接口中的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也会自动加上。

  • 使用接口
    一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
    继承父类实现接口的语法为:

    [修饰符] class类名extends 父类implements接口1 ,接口2…{
    类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。
    }
    
  • 如果要继承父类,继承必须在实现接口之前

    package com.imooc.my;
    
    public class SmartPhone extends Telphone implements IPlayGame {
    
    	@Override
    	public void call() {
    		// TODO Auto-generated method stub
    		System.out.println("通过语音来打电话");
    	}
    
    	@Override
    	public void message() {
    		// TODO Auto-generated method stub
    		System.out.println("通过语音来发短信");
    	}
    
    	@Override
    	public void playGame() {
    		// TODO Auto-generated method stub
    		System.out.println("电话具有玩游戏的功能");
    	}
    
    }
    
    package com.imooc.my;
    
    public class Psp implements IPlayGame {
    
    	@Override
    	public void playGame() {
    		// TODO Auto-generated method stub
    		System.out.println("psp具有玩游戏的功能");
    	}
    
    }
    
    
    package com.imooc.my;
    
    public class T {
    
    	public static void main(String[] args) {
    		
    		//通过接口描述两个不同类型之间的共同特性
    		IPlayGame ip1 = new SmartPhone();
    		ip1.playGame();
    		IPlayGame ip2 = new Psp();
    		ip2.playGame();
    		
    	}
    
    }
    
    
  1. 什么是多态,多态实现的三个必要条件是什么?编程测试。
  2. Object类。
  3. 匿名内部类
  4. 异常
  5. 访问控制
    面向对象的内存分析:
    参考第四章com.huaxin07.task01中的代码及008_案例分析图片,自己执行代码画图。(此图一般重要)

作业要求:所有代码在eclipse中测试通过,敲三遍,手写一遍,开学检查。

最后

以上就是殷勤鸭子为你收集整理的2019寒假java作业02的全部内容,希望文章能够帮你解决2019寒假java作业02所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部