16.抽象类

package cn.jbit.epet.override;
/**
 * 宠物类,狗狗和企鹅的父类
 */
public abstract class Pet {
    private String name = "无名氏";// 昵称
    private int health = 100;// 健康值
    private int love = 20;// 亲密度

    /**
     * 无参构造方法
     */
    public Pet() {
    }
    /**
     * 有参构造方法
     * @param name  昵称
     */
    public Pet(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        if(health<0||health>100){
            System.out.println("健康值应该在0至100之间,默认值为60。");
            this.health=60;
            return;
        }
        this.health = health;
    }

    public int getLove() {
        return love;
    }

    public void setLove(int love) {
        if(love<0||love>100){
            System.out.println("亲密度应该在0至100之间,默认值为10。");
            this.love=10;
            return;
        }
        this.love = love;
    }

    /**
     * 输出宠物信息
     */
    public void print() {
        System.out.println("宠物的自白:\n我的名字叫" +
                this.name + ",我的健康值是" + this.health
                + ",我和主人的亲密程度是" + this.love + "。");
    }
    public abstract void toHospital();
}
package cn.jbit.epet.override;

/**
 * 狗狗类,宠物的子类。
 */
public class Dog extends Pet {
    private String strain="吉娃娃";// 品种

    public Dog(){}

    /**
     * 有参构造方法。
     * @param name   昵称
     * @param strain   品种
     */
    public Dog(String name, String strain) {
        super(name);
        this.strain = strain;
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }
    public String getStrain() {
        return strain;
    }

    public void print(){
        super.print();
        System.out.println("我是一只"+this.getStrain()+"犬。");
    }

    public void toHospital() {
        this.setHealth(60);
        System.out.println("打针、吃药");
    }

}
package cn.jbit.epet.override;

public class Master {
    // 给宠物看病
    public void cure(Pet pet) {
        if (pet.getHealth() < 50)
            pet.toHospital();
    }
}
package cn.jbit.epet.override;
/**
 * 企鹅类,宠物的子类。
 */
public class Penguin extends Pet {
    private String sex;// 性别
    /**
     * 有参构造方法。
     * @param name 昵称
     * @param sex 性别
     */
    public Penguin(String name, String sex) {
        super(name);
        this.sex = sex;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }    

    public void print(){
        super.print();
        System.out.println("我的性别是"+this.getSex()+"。");
    }

    public void toHospital() {
        this.setHealth(70);
        System.out.println("吃药、疗养");
    }
}
package cn.jbit.epet.override;

public class Test {
    public static void main(String[] args) {
        Pet dog=new Dog();
        dog.setHealth(10);
        dog.print();
        System.out.println("*************************");
        Master master=new Master();
        master.cure(dog);
        dog.print();
    }
}
时间: 2024-12-21 03:30:19

16.抽象类的相关文章

蓝鸥Unity开发基础二——课时16 抽象类

推荐视频讲师博客:http://11165165.blog.51cto.com/ 抽象类 有时设计类仅仅为了表达抽象的概念,不与具体的事物相联系,只作为其派生类的基类使用,用来描述所有子类的共同特征,这时我们可以使用抽象类. 抽象类不能被直接实例化,抽象类中可以包含抽象方法 抽象类和抽象方法一起使用,它们都是C#语言中的一种新的特性.下面让我们用代码演示一下使用方式: using System; namespace Lesson_16{    //抽象方法只能出现在抽象类中    public 

Java知多少(40)接口和抽象类的区别

类是对象的模板,抽象类和接口可以看做是具体的类的模板. 由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊.我们首先分析它们具有的相同点. 都代表类树形结构的抽象层.在使用引用变量时,尽量使用类结构的抽象层,使方法的定义和实现分离,这样做对于代码有松散耦合的好处. 都不能被实例化. 都能包含抽象方法.抽象方法用来描述系统提供哪些功能,而不必关心具体的实现. 下面说一下抽象类和接口的主要区别. 1) 抽象类可以为部分方法提供实现,避免了在

Java学习 (十四)、面向对象编程(六)抽象类

抽象的定义:抽象是把多个事物的共性的内容抽取出来,本质就是把我们关注的内容抽取出来.(比如:宝马,奔驰都属于汽车,汽车是抽象出来的概念); 抽象类:Java中可以定义没有方法体的方法,该方法由其子类来具体的实现.该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类; 抽象方法特点: ①   只有方法头没有方法体的方法称为抽象方法: ②   抽象方法用abstract来修饰; ③   抽象方法代表一种不确定的操作或行为; ④   抽象方法不能被调用; 抽象类的特点: ①   定义

java核心技术 - 17个重要的知识点

1.Java中没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定类的main方法中的代码开始执行,因此,执行代码中必须有一个main函数. 3.Java是典型的强类型语言,即必须声明变量的类型,Java中有8种类型,6种数值类型(4个整数型和2个浮点型).一个字符类型和一个boolean类型. 想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载. 4.强制类型转换: int nx = (int) x; //

【原】Java学习笔记019 - 面向对象

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 仔细想一想,Animal应该是一个抽象的概念,相对于Animal来说,狗才是具体的概念 6 // Animal的行为也应该算是一个抽象的行为 7 8 // Java中对于这些抽象的概念或是抽象的行为,提供了一个关键字 abstract 来进行修饰 9 10 // 关键字 abstract用在类上,

javaSE、javaEE、Android知识点总结

上学时候的一些学习总结,如有错误请大家指出,欢迎指出,共同学习. 1. 什么是WebView? WebView是一个使用WebKit引擎的浏览器组件,用来加载网页. 2. WebView中加载网页的两种方式? loadUrl(url) 通过url地址加载互联网或本地网页 如:loadUrl("http://www.baidu.com"); loadUrl("file:///android_asset/html/index.html"); loadData(data,

JAVA面试题最全集

JAVA面试题最全集 2009-01-19 15:40 3458人阅读 评论(0) 收藏 举报 java面试ejbservletstringhashmap 一.Java基础知识1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别.2.字符串的操作:  写一个方法,实现字符串的反转,如:输入abc,输出cba  写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc.3.数据类型之间的转换  如何将数值型字符转换为数字(Integer,Doubl

黑马程序员 Java SE回顾

----<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Java SE基础回顾 1.循环语句中的break是终止全部循环,跳出循环体:而continue是终止本次循环,跳执行下一循环 2.return语句有两个作用:返回值:结束方法的运行 3.对于java中面向对象的理解:以类的方式组织代码,以对

Java新手入门的30个基本概念

Java新手入门的30个基本概念 在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念. Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载