JAVA学习笔记(十)- 封装与继承
2015-03-23 10:37
387 查看
封装
/* * 封装 * * 一个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学习笔记——类与对象(封装、继承与多态)
- 学习笔记 Java类的封装、继承和多态 2014.7.10
- JAVA学习笔记之-封装,继承,多态 总结
- 黑马程序员java学习笔记——面向对象的特征封装、继承和多态
- Java学习笔记(四)之―认识类、对象、封装、继承、多态、打包器
- java 入门学习笔记(封装,继承,多态)
- java学习笔记6——封装、继承和多态
- Java学习笔记_005_封装与继承
- 学习笔记 Java类的封装、继承和多态 2014.7.10
- Java学习笔记(一)----封装 继承 多态 抽象 接口
- JAVA学习笔记04封装,继承,多态
- java 学习笔记——类之间的关系之封装、继承与多态的详解
- 【JAVA_SE学习笔记】封装与继承
- 【python学习笔记】Python面向对象的理解(封装,继承,多态)
- java深入学习七之封装与继承,多态
- java复习笔记4:封装,继承,多态
- Java学习笔记——继承
- Java学习笔记(25)--继承(extends)详解
- Java学习笔记(26)--理解java的三大特性之继承
- [学习笔记] Java核心技术 卷一:基础知识 对象与类、继承(二)