您的位置:首页 > 编程语言 > Java开发

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  封装 继承 super