9.不能被继承的情况1

package cn.jbit.epet.purview;

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

    /**
     * 有参构造方法。
     * @param name   昵称
     * @param strain   品种
     */
    public Dog(String name, String strain) {
        super(name); //此处不能使用this.name=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 test(){
        //System.out.println(name); // 不能继承private成员
        System.out.println(color); // 同包下,可以继承protected成员
        System.out.println(avoirdupois);  //同包下,子类可以继承默认访问权限的成员
        System.out.println(id);// 同包下,可以继承public成员
    }
}
package cn.jbit.epet.purview;

/**
 * 宠物类,狗狗和企鹅的父类。
 */
public class Pet {
    private String name = "无名氏";// 昵称
    private int health = 100;// 健康值
    private int love = 0;// 亲密度
    /*以下属性是测试访问权限及继承情况*/
    int avoirdupois=2; //重量
    protected String color; //颜色
    public int id=1001; //编号
    /**
     * 无参构造方法。
     */
    public Pet() {
        this.health = 95;
        System.out.println("执行宠物的无参构造方法。");
    }
    /**
     * 有参构造方法。
     * @param name  昵称
     */
    public Pet(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public int getHealth() {
        return health;
    }
    public int getLove() {
        return love;
    }
    /**
     * 输出宠物信息。
     */
    public void print() {
        System.out.println("宠物的自白:\n我的名字叫" +
                this.name + ",我的健康值是" + this.health
                + ",我和主人的亲密程度是" + this.love + "。");
    }
}
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(new Pet().color);  //同包下,可以使用protected成员
        System.out.println(new Pet().id);// 同包下,可以使用public成员
    }

}
时间: 2025-01-05 13:21:37

9.不能被继承的情况1的相关文章

Java 第17章 继承

继承的概念 继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基, 是提高软件系统的可扩展性与可维护性的主要途径. 所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现 父类代码的重用,子类 “能吸收已有类的数据属性和行为,并能扩展新的能力.” 使用继承; 编写父类: class  pet{ //公共的属性和方法 } 编写子类,继承父类: class Dog extends pet(只能继承一个父类) {//子类特有的属性和方法} class Pengu

c++设计一个不能被继承的类,原因分析

用C++实现一个不能被继承的类(例1) #include <iostream> using namespace std; template <typename T> class Base{     friend T; private:     Base(){         cout << "base" << endl;     }     ~Base(){} }; class B:virtual public Base<B>

多重继承,虚继承,MI继承中虚继承中构造函数的调用情况

先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: [cpp] view plain copy print? //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base()

c++设计一个不能被继承的类

摘要:使用友元.私有构造函数.虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么? 用C++实现一个不能被继承的类(例1) 1 #include <iostream> 2 using namespace std; 3 4 template <typename T> 5 class Base{ 6 friend T; 7 private: 8 Base(){ 9 cout << "base" << endl; 1

C++中定义一个不能被继承的类

1.一种错误的解法 最开始是从构造函数开始着手(先声明这种方法不能定义一个不能被继承的类,这是一种错误的方法,但是很容易往这方面想),假设存在下面的继承体系: 现在假设B是一个不能被继承的类,那么如果存在B的子类C,那么C的构造过程应该会报错,那么如何能够让B能正常构造而C不能正常构造呢?首先A,B,C的构造函数和析构函数都假设是public的,最开始想的是让B私有继承自A,根据private继承的特性,父类中public和protected的成员在子类中都会变成private的,那么A的构造函

什么情况下应用纯虚类

前几天跟同事brainstorm,讨论一个关于纯虚类的使用问题,挺有意思.回来心中久久不能平静,写出来一吐为快. 不论在C++中还是C#中,纯虚类都是不能实例化的,这是因为纯虚类其实是一个对业务类型的一种高度抽象,本质上是不存在这种东西的,所以也就不能实例化它.对于C++中只要类中含有一个纯虚函数就是纯虚类,而C#中是abstract修饰的类就是纯虚类,即使类中没有虚方法也可以是纯虚类,在这里我觉得C#的纯虚类没有C++的严谨,如果纯虚类中没有纯虚方法的话,那有何意义. 明白了纯虚类的原理,那纯

为什么抽象类中的构造函数可以被继承并被调用?

namespace ConsoleApplication12 { public abstract class A { static A() { Console.WriteLine("static A"); } public A() { Console.WriteLine("normal A"); } } public class B : A { static B() { Console.WriteLine("static B"); } publi

maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理

maven依赖本地非repository中的jar包 http://www.cnblogs.com/piaolingxue/archive/2011/10/12/2208871.html 博客分类: MAVEN 今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. 在eclipse中开发没有问题,但是使用maven编译插件开始便宜总是报找不到WEB-INF

Linux 查看端口使用情况

之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat  -anp  |grep   端口号 如下,我以3306为例,netstat  -anp  |grep  3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图1: 图1 图1中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了. 2.netstat   -nult