java课件尚.docx
- 文档编号:15431376
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:133
- 大小:8.89MB
java课件尚.docx
《java课件尚.docx》由会员分享,可在线阅读,更多相关《java课件尚.docx(133页珍藏版)》请在冰点文库上搜索。
java课件尚
面向对象特征之一:
封装性
/*
*一、面向对象的特征一:
封装与隐藏
*问题:
当创建了类的对象后,如果直接通过“对象.属性”的方式来赋值的话,可能会
*出现与现实不符的情况,我们考虑不让对象来直接作用属性,而是通过“对象.方法”
*的形式,来控制对象对属性的访问,实际情况中,对属性的要求就可以通过方法来体现
*
*解决的方法:
(封装性思想)
*1、将类的属性私有化。
private
*2、提供公共的方法(setter&getter)来实现
*
*二、权限修饰符:
private缺省的protectedpublic
*可以用来修饰属性和方法。
(用代码来演示它们的权值大小)
*注:
1)权限从大到小:
public>protected>缺省>private
*2)对于class的权限修饰符只有public和default(缺省的)
*3)private修饰的属性只能在本类中使用;protected和缺省的在本包中使用;若想在不同的包中使用,则需引入包名,如:
importp1.Person;
*/
packagefengzhuan;
publicclassTestAnimal{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Animala1=newAnimal();
//a1.name="花花";
//a1.legs=4;//动物腿的个数一般不能为奇数或负数
a1.setLegs(4);
a1.info();
}
}
classAnimal{
//private修饰的属性只能在本类中调用,
privateStringname;
privateintlegs;
Stringcolor;//缺省的修饰符
publicdoubleweight;
publicvoideat(){
System.out.println("动物进食");
}
publicvoidsleep(){
System.out.println("动物睡觉");
}
publicvoidinfo(){
System.out.println("name:
"+name+"\t"+"legs:
"+legs);
}
publicvoidsetLegs(intlegs){
if(legs>0&&legs%2==0){
this.legs=legs;
}else{
System.out.println("你输入的数据有误!
");
}
}
publicvoidsetName(Stringn){
name=n;
}
//设置类的属性
publicintgetLegs(){
returnlegs;
}
//获取类的属性
publicStringgetName(){
returnname;
}
}
面向封装的练习
packagefengzhuan;
publicclassTestPerson{
publicstaticvoidmain(String[]args){
Personp=newPerson();
p.setAge(120);
System.out.println(p.getAge());
}
}
classPerson{
privateintage;
publicintgetAge(){
returnage;
}
publicvoidsetAge(inta){
if(a>0&&a<=130){
age=a;
}else{
//System.out.println("你输入的信息有误!
");
thrownewRuntimeException("你输入的信息有误!
");
}
}
}
面向对象特征之二:
继承性
从下图可以看出继承的好处:
/*
*面向对象的特征之二:
继承性
*1、为什么要设计继承性
*2、通过“classAextendsB”类实现继承。
*子类:
A父类(基类或超类):
B
*3、子类继承父类后,父类中声明的属性和方法在子类中都可以使用。
*明确:
当父类中有私有的属性和方法时,子类同样可以获取得到,
*只是由于封装性的设计,使得子类不可以直接调用。
*子类除了通过继承获取父类的结构外,还可以定义自己特有的成分。
*extends:
子类是父类功能的扩展,明确子类不是父类的子集。
*4、java的类继承只能是单继承。
一个子类只有一个父类,反之,一个父类有多个子类。
*5、子类、父类是相对的概念。
*
*/
packagejicheng;
publicclassPerson{
privateStringname;
privateintage;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicvoideat(){
System.out.println("吃饭");
}
publicvoidwalk(){
System.out.println("走路");
}
}
packagejicheng;
publicclassStudentextendsPerson{
//privateStringname;
//privateintage;
publicStudent(){
}
publicStudent(Stringname,intage){
//this.name=name;
//this.age=age;
this.setName(name);
this.setAge(age);
}
//publicStringgetName(){
//returnname;
//}
//publicvoidsetName(Stringname){
//this.name=name;
//}
//publicintgetAge(){
//returnage;
//}
//publicvoidsetAge(intage){
//this.age=age;
//}
//
//publicvoideat(){
//System.out.println("吃饭");
//}
//publicvoidwalk(){
//System.out.println("走路");
//}
}
packagejicheng;
publicclassWorkerextendsPerson{
}
packagejicheng;
publicclassTestExtends{
publicstaticvoidmain(String[]args){
Students=newStudent();
s.eat();
Workerw=newWorker();
w.eat();
Personp=newPerson();
p.eat();
s.setAge(12);
s.setName("孙悟空");
System.out.println(s.getName()+":
"+s.getAge());
}
}
面向对象之继承的练习:
packagejicheng;
publicclassManKind{
privateintsex;
privateintsalary;
publicintgetSex(){
returnsex;
}
publicvoidsetSex(intsex){
this.sex=sex;
}
publicintgetSalary(){
returnsalary;
}
publicvoidsetSalary(intsalary){
this.salary=salary;
}
publicvoidmanOrWoman(){
if(sex==1){
System.out.println("Man");
}elseif(sex==0){
System.out.println("Woman");
}else{
System.out.println("输入有误!
");
}
}
publicvoidemployees(){
if(salary==0)
System.out.println("nojob!
");
elseif(salary>0)
System.out.println("job!
");
}
}
packagejicheng;
publicclassKidsextendsManKind{
privateintyearsOld;
publicintgetYearsOld(){
returnyearsOld;
}
publicvoidsetYearsOld(intyearsOld){
this.yearsOld=yearsOld;
}
publicvoidprintAge(){
System.out.println(this.yearsOld+"yearsOld");
}
}
packagejicheng;
publicclassTestKids{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
KidssomeKid=newKids();
someKid.setSalary(0);
someKid.setSex
(1);
someKid.setYearsOld(13);
someKid.employees();
someKid.manOrWoman();
someKid.printAge();
}
}
方法的重写(修饰符返回值类型方法名(参数列表))
-------(方法的重载:
出现在同一个类中,多个同名的方法构成重载)
1、前提:
有子类继承父类。
2、子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(overrideoverwrite)、覆盖。
(依然用上面继承的代码来演示)
3、重写的规则:
1)要求子类方法的“返回值类型方法名(参数列表)”与父类的方法一样。
2)子类方法的修饰符不能小于父类方法的修饰符。
(演示,为了避免出错,直接copy)
3)若父类方法抛异常,那么子类方法抛出的异常类型不能大于父类的。
4)子父类的方法必须同为static或同为非static的。
5)如果父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样不叫重写。
packagejicheng;
publicclassStudentextendsPerson{
//privateStringname;
//privateintage;
publicStudent(){
}
publicStudent(Stringname,intage){
//this.name=name;
//this.age=age;
this.setName(name);
this.setAge(age);
}
//publicStringgetName(){
//returnname;
//}
//publicvoidsetName(Stringname){
//this.name=name;
//}
//publicintgetAge(){
//returnage;
//}
//publicvoidsetAge(intage){
//this.age=age;
//}
//方法的重写
publicvoideat(){
System.out.println("学生应该吃有营养的饭菜");
}
publicvoidwalk(){
System.out.println("学生蹦蹦跳跳地走路");
}
}
Super关键字的使用
super:
可以用来修饰属性、方法、构造器
*1、当子类与父类中有同名的属性时,可以通过“super.此属性”显式的调用父类中声明的属性。
若想调用子类的同名的属性“this.此属性”。
*2、当子类重写父类的方法以后,在子类中若想再显式的调用父类的被重写的方法,就需要使用“super.方法”。
*3、super修饰构造器:
通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器。
*>在构造器内部。
“super(形参列表)”必须声明在首行!
*>在构造器内部:
“super(形参列表)”或“this(形参列表)”只能出现一个。
*>当构造器中不显式的调用“super(形参列表)”或“this(形参列表)”其中任何一个,默认调用父类空参的构造器。
*建议:
设计一个类时,尽量要提供一个空参的构造器
packagejicheng;
publicclassPerson{
protectedStringname;
protectedintage;
intid=1001;;//个人的身份证号码
publicPerson(){
System.out.println("这是一个空参的构造器");
this.name="AA";
this.age=1;
}
publicPerson(Stringname){
this();
this.name=name;
}
publicPerson(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicvoideat(){
System.out.println("吃饭");
}
publicvoidwalk(){
System.out.println("走路");
}
}
packagejicheng;
publicclassStudentextendsPerson{
privateStringschoolName;
intid=1002;//学生的学号
publicStudent(){
//super();
}
publicStudent(StringschoolName){
super("李雷",23);
this.schoolName=schoolName;
}
publicStringgetSchoolName(){
returnschoolName;
}
publicvoidsetSchoolName(StringschoolName){
this.schoolName=schoolName;
}
publicvoideat(){
System.out.println("学生吃饭");
}
publicvoidinfo(){
this.eat();
super.eat();
}
publicvoidshow(){
System.out.println(this.id);//1002
System.out.println(super.name);
System.out.println(super.id);//1001
}
}
packagejicheng;
publicclassTestStudent{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Students=newStudent();
s.show();
s.info();
System.out.println(s.getName()+":
"+s.getAge());
Students1=newStudent("北京大学");
System.out.println(s1.getName()+":
"+s1.getAge()+","+s1.getSchoolName());
}
}
子类对象实例化全过程
packagejicheng;
publicclassTestDog{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Dogd=newDog();
d.setAge(10);
d.setName("花花");
d.setHostName("小明");
System.out.println("name:
"+d.getName()+"\t"+"age:
"+d.getAge()+"\t"+"hostname:
"+d.getHostName());
}
}
//生物
classCreator{
privateintage;
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicCreator(){
super();
System.out.println("thisisCreator'sconstructor");
}
}
//动物
classAnimalextendsCreator{
privateStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicAnimal(){
super();
System.out.println("thisisAnimal'sconstructor");
}
}
classDogextendsAnimal{
privateStringhostName;
publicStringgetHostName(){
returnhostName;
}
publicvoidsetHostName(StringhostName){
this.hostName=hostName;
}
publicDog(){
super();
System.out.println("thisisDog'sconstructor");
}
}
程序运行的结果:
thisisCreator'sconstructor
thisisAnimal'sconstructor
thisisDog'sconstructor
name:
花花age:
10hostname:
小明
下列程序执行的结果是:
继承与super使用的练习
再使用withdraw方法取款2500,使用deposit方法存款3000元,然后打印余额和月利率
2、创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。
在checkAccount类中重写withdraw方法,其算法如下:
如果(取款金额<账户余额),
则可以直接取款
如果(取款金额>账户余额),
计算需要透支的额度
判断可透支额overdraw是否足够支付本次透支需要,如果可以
将账户余额修改为0,冲减可透支金额。
如果不可以
提示用户超过可透支的额度。
packagejicheng;
publicclassAccount{
protectedintid;
protecteddoublebalance;
protecteddoubleannualInterestRate;
publicAccount(intid,doublebalance,doubleannualInterestRate){
super();
this.id=id;
this.balance=balance;
this.annualInterestRate=annualInterestRate;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicdoublegetBalance(){
returnbalance;
}
publicvoid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课件