首页 > 编程语言 > 详细

JAVA学习笔记(十)- 封装与继承

时间:2015-03-23 11:23:10      阅读:238      评论:0      收藏:0      [点我收藏+]

封装

/*
 * 封装
 * 
 * 一个Java源代码中可以定义多个类,但public修饰的类只能有一个,必须与文件名相同
 */
public class Test04
{
    public static void main(String[] args)
    {
        // 创建雇员对象
        Employee emp = new Employee();
        // 为属性赋值
        emp.setName("王兵");
        emp.setPassword("22222");
        emp.setAge(22);
        // 调用对象的方法
        emp.show();
    }
}

/*
 * 雇员类Employee
 */
class Employee
{
    // 属性
    private String name;
    private String password;
    private int age;

    // 获取name
    public String getName()
    {
        return name;
    }

    // 设置name
    public void setName(String name)
    {
        if (name == null || "".equals(name) || name.length() > 10)
        {
            System.out.println("用户名无效!");
            name = "无名氏";
        } else
        {
            this.name = name;
        }
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        if (password.length() < 5)
        {
            System.out.println("密码必须大于6位!");
        } else
        {
            this.password = password;
        }
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        if (age < 0 || age > 100)
        {
            System.out.println("年龄无效,范围为[0,100]!");
        } else
        {
            this.age = age;
        }
    }

    // 显示雇员信息
    public void show()
    {
        System.out.println("姓名:" + name + ",密码:" + password + ",年龄:" + age);
    }

}

继承

/*
 * 继承
 * 代码复用、扩展
 */
public class Test06
{
    public static void main(String[] args)
    {
        Pupil pupil = new Pupil("万丽庆", 9, 1000, "花园宝宝");
        pupil.show();
        pupil.play();

        Middle middle = new Middle("赵超", 15, 1000, "晚自习");
        middle.show();
        middle.zhongkao();

        College college = new College("朱雪", 21, 1000, "谈恋爱");
        college.show();
        college.bukao();
    }
}

/*
 * 学生类Student
 */
class Stu
{
    String name;// 姓名
    int age;// 年龄
    double fee;// 学费
}

/*
 * 小学生类Pupil,继承自Stu父类
 */
class Pupil extends Stu
{
    String cartoon;// 动画片

    public Pupil(String name, int age, double fee)
    {
        this.name = name;
        this.age = age;
        this.fee = fee * 0.7;
    }

    public Pupil(String name, int age, double fee, String cartoon)
    {
        this(name, age, fee);
        this.cartoon = cartoon;
    }

    public void show()
    {
        System.out.println("俺是小学生,姓名:" + name + ",年龄:" + age + ",学费:" + fee
                + ",动画片:" + cartoon);
    }

    public void play()
    {
        System.out.println("扔沙包。。。。。");
    }
}

/*
 * 中学生类Middle
 */
class Middle extends Stu
{
    String wzx;// 晚自习

    public Middle(String name, int age, double fee, String wzx)
    {
        this.name = name;
        this.age = age;
        this.fee = fee * 0.8;
        this.wzx = wzx;
    }

    public void show()
    {
        System.out.println("俺是中学生,姓名:" + name + ",年龄:" + age + ",学费:" + fee
                + ",正在:" + wzx);
    }

    public void zhongkao()
    {
        System.out.println("中考。。。。");
    }
}

/*
 * 大学生类College
 */
class College extends Stu
{
    String love;// 恋爱

    public College(String name, int age, double fee, String love)
    {
        this.name = name;
        this.age = age;
        this.fee = fee;
        this.love = love;
    }

    public void show()
    {
        System.out.println("俺是大学生,姓名:" + name + ",年龄:" + age + ",学费:" + fee
                + ",正在" + love);
    }

    public void bukao()
    {
        System.out.println("补考。。。");
    }

}

Java中不支持多继承


/*
 * Java中不支持多继承,即一个类只能有一个直接父类
 * 但Java支持多重继承,即继承的传递性
 */
public class Test07
{
    public static void main(String[] args)
    {
        C c = new C();
        c.show();
    }
}

class A
{
    String name = "tom";
}

class B extends A // 一个类只能有一个直接父类
{
    int age = 20;

}

class C extends B
{
    String sex = "男";

    public void show()
    {
        System.out.println(name + "," + age + "," + sex);
    }
}

super关键字

/*
 * 默认所有的类都继承自Object
 * 
 * super表示父类
 * 1.可能通过super()调用父类的构造方法
 * 2.使用super访问父类中的成员
 * 
 * 注:super关键字只能出现在子类中
 * 
 * 创建子类时默认会自动调用父类中无参的构造方法
 * 如果子类中指定调用父类的构造方法,则父类只需提供此构造方法即可
 * 
 * 创建对象时必须调用构造方法
 * 调用构造方法一定会创建对象?
 */
public class Test09
{
    public static void main(String[] args)
    {
        Pig pig = new Pig("八戒", "男", 25, 200);
        pig.name = "九戒";// 为子类的name属性赋值
        pig.show();

    }
}

/*
 * Live类
 */
class Live
{
    public Live()
    {
        System.out.println("Live类中无参的构造方法");
    }
}

/*
 * 父类Animal,继承自Live
 */
class Animal extends Live
{
    String name;
    String sex;

    public Animal()
    {
        super();// 调用父类Object中的无参的构造方法
        System.out.println("父类中无参的构造方法");
    }

    public Animal(String name, String sex)
    {
        this.name = name;
        this.sex = sex;
        System.out.println("父类中带参的构造方法");
    }
}

/*
 * Pig类,继承自Animal
 */
class Pig extends Animal
{
    private int age;// 猪龄
    public double weight;// 体量
    String name;// 子类中出现与父类中同名的属性

    public Pig()
    {
        System.out.println("子类中无参的构造方法");
    }

    public Pig(String name, String sex, int age)
    {
        super(name, sex);// 调用父类中带参的构造方法,初始化成员属性
        this.age = age;
        System.out.println("子类中带参的构造方法");
    }

    public Pig(String name, String sex, int age, double weight)
    {
        this(name, sex, age);// 调用本类中的重载的构造方法
        this.weight = weight;
        System.out.println("子类中带参的构造方法2");
    }

    // 显示信息
    public void show()
    {
        System.out.println("子类中的name属性:" + name);
        System.out.println("父类中的name属性:" + super.name);
        System.out.println("性别:" + super.sex);// 也可省略super
        System.out.println("年龄:" + age);
        System.out.println("体重:" + this.weight);// 也可省略this
    }
}

封装与继承实例

/*
 * 创建一个父类Employee
 属性:姓名name、月薪salary、月份count
 方法:基本薪水 getBaseSalary()=月薪*月份
 子类Manager是父类的扩展版本,除了继承了父类定义属性和方法,并且为它自己增添了独特的元素
 新增属性:奖金Bonus
 新增方法:getIncome ()=基本薪水 +奖金
 */
public class Test08
{
    public static void main(String[] args)
    {
        Manager m = new Manager();
        m.name = "赵小涛";
        m.salary = 3500;
        m.count = 14;
        m.bonus = 30000;
        System.out.println("姓名:"+m.name+",年薪:"+m.getIncome());

        Salesman s=new Salesman();
        s.name="赵超";
        s.salary=3000;
        s.count=12;
        s.comm=60000;
        System.out.println("姓名:"+s.name+",年薪:"+s.getIncome());
    }
}

/*
 * Emp雇员类
 */
class Emp
{
    String name;
    double salary;
    int count;

    // 年薪
    public double getBaseSalary()
    {
        return salary * count;
    }
}

/*
 * Manager经理类,继承自Emp
 */
class Manager extends Emp
{
    double bonus;// 年终奖

    public double getIncome()
    {
        return getBaseSalary() + bonus;
    }
}

/*
 * Salesman销售员,继承自Emp
 */
class Salesman extends Emp
{
    double comm;// 提成

    public double getIncome()
    {
        return salary * count + comm;
    }
}

JAVA学习笔记(十)- 封装与继承

原文:http://blog.csdn.net/wangzi11322/article/details/44560493

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!