Java面向对象3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:MyEclipse 10 Java
作者:陈剑波
撰写时间:2019年05月19日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1、方法的重载(Overload)
方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
重载规则:
1、被重载的方法必须形参列表不一样(参数个数或类型不一样);
2、被重载的方法可以改变返回类型;
3、被重载的方法可以改变访问修饰符;
4、被重载的方法可以声明新的或更广的检查异常;
5、方法能够在同一个类中或者在一个子类中被重载;
6、返回值类型不能作为重载函数的区分标准;
方法的重载是指一个类中可一定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数列表选择对应的方法。
示例代码:
public class MethodOverloading { |
int stature; |
int weight; |
String job; |
|
MethodOverloading() { |
System.out.println("无参数构造方法"); |
stature = 180; |
weight = 70; |
job = "架构师"; |
} |
|
MethodOverloading(int i) { |
System.out.println("有参数构造方法"); |
stature = i; |
weight = 71; |
job = "软件架构师"; |
} |
|
MethodOverloading(int i, int x) { |
System.out.println("有参数构造方法2"); |
stature = i; |
weight = x; |
stature = 183; |
} |
|
MethodOverloading(int i, int x, String y) { |
System.out.println("有参数构造方法3"); |
stature = i; |
weight = x; |
job = y; |
} |
|
// 被重载的方法必须形参列表不一样(参数个数或类型不一样); |
void MethodOverloading2() { |
System.out.println("本人身高 " + stature + "厘米"); |
} |
// 被重载的方法可以改变访问修饰符; |
public void MethodOverloading2(String s) { |
System.out.println(s + ": 本人身高 " + stature + "厘米"); |
} |
|
protected void MethodOverloading2(String s, String t) { |
System.out.println(s + t + stature + "厘米"); |
} |
// 被重载的方法可以改变返回类型 |
String MethodOverloading2(String s, String t, String j) { |
return s + ": 本人身高 " + stature + "厘米" + t + this.weight + "千克"+ j + this.job; |
} |
|
public static void main(String[] args) { |
MethodOverloading m = new MethodOverloading(); |
MethodOverloading m2 = new MethodOverloading(185); |
MethodOverloading m3 = new MethodOverloading(186, 77); |
MethodOverloading m4 = new MethodOverloading(190, 86, "顶级黑客"); |
|
m.MethodOverloading2(); |
m.MethodOverloading2("方法的重载"); |
|
m2.MethodOverloading2(); |
m2.MethodOverloading2("方法的重载2"); |
|
m3.MethodOverloading2("方法的重载3", ": 本人身高"); |
|
System.out.println(m4.MethodOverloading2("方法的重载", ",本人体重", ",工作:")); |
} |
}
运行结果: |
无参数构造方法 |
有参数构造方法 |
有参数构造方法2 |
有参数构造方法3 |
本人身高 180厘米 |
方法的重载: 本人身高 180厘米 |
本人身高 185厘米 |
方法的重载2: 本人身高 185厘米 |
方法的重载3: 本人身高183厘米 |
方法的重载: 本人身高 190厘米,本人体重86千克,工作:顶级黑客 |
2、Java封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接 口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访 问。
要访问该类的代码和数据,必须通过严格的接口控制。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点:
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员变量进行更精确的控制。
4、隐藏信息,实现细节。
实现Java封装的步骤:
1. 修改属性的可见性来限制对属性的访问(一般限制为private) 。
2. 对每个值属性提供对外的公共方法访问,也就是创建getter 和 setter方法(将实 例变量的首字母大写,在前面添加get或者set, 变成getter 和 setter方法名)。
示例代码:
public class Encapsulation { |
private String name; |
private String priesthood; |
private String power; |
private String achievement; |
|
public String getName() { |
return name; |
} |
|
public void setName(String name) { |
this.name = name; |
} |
|
public String getPriesthood() { |
return priesthood; |
} |
|
public void setPriesthood(String priesthood) { |
this.priesthood = priesthood; |
} |
|
public String getPower() { |
return power; |
} |
|
public void setPower(String power) { |
this.power = power; |
} |
|
public String getAchievement() { |
return achievement; |
} |
|
public void setAchievement(String achievement) { |
this.achievement = achievement; |
} |
} |
public class EncapsulationTest { |
public static void main(String[] args) { |
Encapsulation encapsulation = new Encapsulation(); |
Encapsulation encapsulation2 = new Encapsulation(); |
|
encapsulation.setName("扎马斯"); |
encapsulation.setPriesthood("界王神兼破壞神"); |
encapsulation.setPower("不死之身"); |
System.out.println("龙珠超人物之一:" + " 姓名:" + encapsulation.getName() |
+" 神职:"+ encapsulation.getPriesthood() +" 能力:"+ encapsulation.getPower()); |
|
encapsulation2.setName("全王"); |
encapsulation2.setPriesthood("全王"); |
encapsulation2.setPower("清除宇宙"); |
encapsulation2.setAchievement("宇宙总共十八个,被全王摧毁了六个,扎马斯也死在他的手上!!!"); |
System.out.println("龙珠超人物之一:" + " 姓名:" + encapsulation2.getName() |
+" 神职:"+ encapsulation2.getPriesthood() +" 能力:"+ encapsulation2.getPower() |
+" 事迹:"+ encapsulation2.getAchievement()); |
|
} |
}
运行结果: |
龙珠超人物之一: 姓名:扎马斯 神职:界王神兼破壞神 能力:不死之身 |
龙珠超人物之一: 姓名:全王 神职:全王 能力:清除宇宙 事迹:宇宙总共十八个,被全王摧毁了六个,扎马斯也死在他的手上!!! |
3、Java继承
一、继承的概念:
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
继承避免了对一般类和特殊类之间共同特征进行的重复描述。
二、实现继承的关系的语法:
class 父类 { |
} |
class 子类 extends 父类 { |
} |
三、继承类型:
注意:Java不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
单继承:
public class A { |
} |
public class B extends A { |
} |
多继承:
public class A { |
} |
public class B extends A { |
} |
public class C extends B { |
} |
不同类继承同一个类:
} |
public class B extends A { |
} |
public class C extends A { |
} |
不支持多继承:
public class A { |
} |
public class B { |
} |
public class C extends A,B { |
} |
示例代码:
public class Vehicle {//车 |
private String bodysize;//车体大小 |
private String color;//颜色 |
private String steeringwheel;//方向盘 |
private String tires;//轮胎 |
public String getBodysize() { |
return bodysize; |
} |
public void setBodysize(String bodysize) { |
this.bodysize = bodysize; |
} |
public String getColor() { |
return color; |
} |
|
public void setColor(String color) { |
this.color = color; |
} |
public String getSteeringwheel() { |
return steeringwheel; |
} |
public void setSteeringwheel(String steeringwheel) { |
this.steeringwheel = steeringwheel; |
} |
public String getTires() { |
return tires; |
} |
public void setTires(String tires) { |
this.tires = tires; |
} |
}
|
public class Limousine extends Vehicle {//轿车Limousine类 继承 车Vehicle类 |
private String asmalltrunk;//子类的属性,小后备箱 |
public String getAsmalltrunk() { |
return asmalltrunk; |
} |
public void setAsmalltrunk(String asmalltrunk) { |
this.asmalltrunk = asmalltrunk; |
} |
}
|
public class Truck extends Vehicle {//卡车Truck类 继承 车Vehicle类 |
private String thebigcrate;//子类的属性,大货箱 |
public String getThebigcrate() { |
return thebigcrate; |
} |
public void setThebigcrate(String thebigcrate) { |
this.thebigcrate = thebigcrate; |
} |
}
|
public class Test3 { |
public static void main(String[] args) { |
Limousine limousine=new Limousine();//实例化的是子类 |
limousine.setBodysize("长:4.2米,宽:1.65米,高:1.4米");//Vehicle类定义 |
limousine.setColor("红色");//Vehicle类定义 |
limousine.setTires("四个轮子");//Vehicle类定义 |
limousine.setAsmalltrunk("小后备箱");//Limousine类扩充方法 |
System.out.println("车身大小:"+limousine.getBodysize()+",车身颜色:"+limousine.getColor()+ |
",轮胎:"+limousine.getTires()+",后备箱:"+limousine.getAsmalltrunk()); |
|
Truck truck=new Truck(); |
truck.setBodysize("长:15米,宽:7米,高:10米");//Vehicle类定义 |
truck.setColor("橙色");//Vehicle类定义 |
truck.setTires("八个轮子");//Vehicle类定义 |
truck.setThebigcrate("大货箱");//Truck类扩充方法 |
System.out.println("车身大小:"+truck.getBodysize()+",车身颜色:"+truck.getColor()+ |
",轮胎:"+truck.getTires()+",后备箱:"+truck.getThebigcrate()); |
} |
}
|
运行结果:
车身大小:长:4.2米,宽:1.65米,高:1.4米,车身颜色:红色,轮胎:四个轮子,后备箱:小后备箱 |
车身大小:长:15米,宽:7米,高:10米,车身颜色:橙色,轮胎:八个轮子,后备箱:大货箱 |