封装
概述:
隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:
- 隐藏实现细节,提供公共的访问方式
- 提高了代码的复用性
- 提高了安全性
原则:
- 将不需要对外提供的内容都隐藏起来
- 把属性隐藏,提供公共方法对其访问
privaite关键字
特点:
- 权限修饰符
- 可修饰成员变量和方法
- 被起修饰的成员只能在本类中被访问
应用:
- 把成员变量用private修饰
- 提供对应的getXxx()和setXxx()方法
this关键字
当局部变量和成员变量名称相同时,如果不用this关键字,会出现局部变量隐藏成员变量的问题。
this代表当前类的一个引用,可理解为就是该类的对象,那个对象调用这个方法,方法中的this就代表那个对象。
构造方法
创建对象,给对象中的成员进行初始化。
特点:
- 方法名和类名相同
- 没有返回值类型,连void也没有
- 没有具体的返回值类型
注意:
-
如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
-
如果我们给出了有参数构造方法,系统将不再提供默认的无参构造方法。
建议永远自己给出无参构造方法
构造方法的重载
构造方法的参数列表不同
例:
public class Erwei {
private int r; /*私有成员变量 圆的半径*/
/*私有成员变量 三角形的三边长*/
private int a;
private int b;
private int d;
/*一.构造方法,传入圆的半径*/
public Erwei(int r)
{
this.r = r; //this.r 即代表 new的对象的半径
}
/*二.构造方法重载,传入三角形的三边长*/
public Erwei(int a,int b,int c){
if(a+b>c&&a-b<c){
this.a = a;
this.b = b;
this.d = c;
}
}
/*三.构造方法重载,同时传入圆的半径和三角形三边长*/
public Erwei(int r,int a,int b,int c){
this.r = r;
if(a+b>c&&a-b<c){
this.a = a;
this.b = b;
this.d = c;
}
}
/*set,get方法,全部是public修饰的,可以在外界调用*/
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
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 getD() {
return d;
}
public void setD(int d) {
this.d = d;
}
/*圆的面积*/
public double getArea(){
double area = this.r*this.r*Math.PI;
return area;
}
/*圆的周长*/
public double getperimeter(){
double perimeter = 2*this.r*Math.PI;
return perimeter;
}
/*三角形的面积*/
public double getArea2(){
double s = (this.a+this.b+this.d)/2;
double area = Math.sqrt(s*(s-this.a)*(s-this.b)*(s-this.d));
return area;
}
/*三角形的周长*/
public double getperimeter2(){
double s = this.a+this.b+this.d;
return s;
}
}
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner into =new Scanner(System.in);
System.out.println("请输入半径");
int r = into.nextInt();
System.out.println("请输入三角形的三边长");
int a = into.nextInt();
int b = into.nextInt();
int c = into.nextInt();
Erwei math = new Erwei(r,a,b,c);
double area= math.getArea();
System.out.println("圆的面积为:" + area);
double perimeter = math.getperimeter();
System.out.println("圆的周长为:"+ perimeter);
System.out.println("================================");
double area1 = math.getArea2();
System.out.println("三角形的面积为:" + area1);
double perimeter1 = math.getperimeter2();
System.out.println("三角形的周长为:" + perimeter1);
}
}