一、面向对象基础
面向对象的三大基本特征是:封装、继承、多态
- 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据
- 隐藏功能或者信息的细节,使用者只关注功能的使用,而不需要关心实现细节
- 继承是为了重用父类代码,同时为实现多态性作准备
- 关键字extends,子类可以集成父类的成员变量和成员方法
- java采用的是单根集成体系
- 多态性是发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类 对象引用变量来实现动态方法调用。
- 一个事物可以有多种表现形式
- 体现形式常见的有3种
- 父类型引用子类对象
- 方法重写
- 方法重载
面向对象三大特征的优缺点
- 设计目标:高内聚低耦合
- 可维护性提高
- 重用性提高
- 扩展性增强
- 执行效率
类:用户自定义的数据类型
- 成员属性----具体存放的数据
- 成员方法----提供的操作
关键字:class
class Student{
long stuNo;
String name;
double score;
void ChiFan(){}
void xuexi(){}
}
对象:变量
- 研究目标
- 变量
Student s1 = new Student();
// 可以访问成员属性,能不能访问取决于范围限定词
s1.stuNo = 999;
s1.name = "张三"
// 调用方法,能不能访问取决于范围限定词
s1.ChiFan();
s1.xuexi();
封装
在面向对象程式设计方法中,封装Encapsulation是指一种将抽象性函式接口的实现细节部分包装、隐藏 起来的方法。
- 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
- 要访问该类的代码和数据,必须通过严格的接口控制。
- 封装最主要的功能在于能修改自己的实现代码,而不用修改那些调用代码的程序片段
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装有三大好处
- 良好的封装能够减少耦合
- 类内部的结构可以自由修改
- 可以对成员进行更精确的控制
- 隐藏信息,实现细节
4个关键字
- private类内可见
- 默认同包可见
- protected同包或者子类可见
- public到处可见
练习
- 声明员工类Employee,包含属性:编号、姓名、年龄、薪资, 声明Test01测试类,并在main方法中,创建2个员工对象,并为属性赋值,并打印两个员工的信息。
// 编号,姓名,年龄,薪资
private int bianHao;
private String xingMing;
private int nianLing;
private double xinZi;
public void show() {
System.out.println("员工" + bianHao + "的编号:" + bianHao + ",姓名:" + xingMing + ",年龄:" + nianLing + ",薪资:" + xinZi);
}
public int getBiaoHao() {
return bianHao;
}
public void setBiaoHao(int biaoHao) {
this.bianHao = biaoHao;
}
public String getXingMing() {
return xingMing;
}
public void setXingMing(String xingMing) {
this.xingMing = xingMing;
}
public int getNianLing() {
return nianLing;
}
public void setNianLing(int nianLing) {
this.nianLing = nianLing;
}
public double getXinZi() {
return xinZi;
}
public void setXinZi(double xinZi) {
this.xinZi = xinZi;
}
public static void main(String[] args) {
Employee e1 = new Employee();
e1.setBiaoHao(1);
e1.setXingMing("张三");
e1.setNianLing(23);
e1.setXinZi(10000.);
e1.show();
Employee e2 = new Employee();
e2.setBiaoHao(2);
e2.setXingMing("李四");
e2.setNianLing(22);
e2.setXinZi(11000.);
e2.show();
}
- 判断三角形
private int a, b, c;
public static void main(String[] args) {
Triangle t = new Triangle();
t.setA(2);
t.setB(3);
t.setC(4);
System.out.println(t.isTriangle() ? "是三角形" : "不是三角形");
System.out.println(t.isRightTriangle() ? "是直角三角形" : "不是直角三角形");
System.out.println(t.isEquilateralTriangle() ? "是等边三角形" : "不是等边三角形");
System.out.println(t.isIsoscelseTriangle() ? "是等腰三角形" : "不是等腰三角形");
System.out.println("海伦数" + t.getArea());
System.out.println("周长是" + t.getLength());
}
public boolean isTriangle() {
if (a + b > c && a + c > b && b + c > a) {
return true;
} else
return false;
}
public boolean isRightTriangle() {
if (isTriangle())
if (a * a + b * b == c * c || b * b + c * c == a * a || a * a + c * c == b * b)
return true;
else
return false;
return false;
}
public boolean isEquilateralTriangle() {
if (isTriangle())
if (a == b && b == c)
return true;
else
return false;
return false;
}
public boolean isIsoscelseTriangle() {
if (isTriangle())
if (a == b || b == c || a == c)
return true;
else
return false;
return false;
}
double getArea() {
double p = (a + b + c) / 2.;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
double getLength() {
return a + b + c;
}
// ------------------------------------------------
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}