Java的三大特性是封装(Encapsulation),继承(Inheritance)和多态(Polymorphism)。
封装(Encapsulation)是指将数据和方法封装在类中,使得类内部的数据和方法对外部不可见,只能通过类提供的接口进行访问和操作。封装可以提高代码的安全性和可维护性,同时也能隐藏内部的实现细节,使得类的使用者只需要关注类提供的接口,而不需要了解其具体实现。
封装的特点:
【1】数据隐藏:类的数据只能通过类提供的接口进行访问,对外部不可见。
【2】接口访问:类的接口是公开的,可以被其他类访问和调用。
【3】安全性:封装可以提高代码的安全性,防止外部的错误操作对类的数据产生影响。
【4】可维护性:封装可以隐藏内部的实现细节,使得类的实现可以更加灵活和易于维护。
继承(Inheritance)是指子类可以继承父类的属性和方法,同时也可以扩展父类的功能。继承可以提高代码的重用性和可扩展性,同时也可以使代码更加简洁和易于理解。
继承的特点:
【1】代码重用:子类可以继承父类的属性和方法,避免了代码的重复编写。
【2】功能扩展:子类可以扩展父类的功能,使得代码更加灵活和可扩展。
【3】继承层次:多层继承可以形成继承层次结构,使得代码的组织和管理更加清晰。
多态(Polymorphism)是指同一个方法可以被不同的对象调用,产生不同的结果。多态可以提高代码的灵活性和可扩展性,同时也可以使代码更加简洁和易于理解。
多态的特点:
【1】方法重载:同一个方法名可以定义多个不同的参数列表,产生方法重载。
【2】方法重写:子类可以重写父类的方法,产生方法重写。
【3】向上转型:子类对象可以向上转型为父类对象,使得同一个方法可以被不同的对象调用。
【4】运行时绑定:方法调用的具体实现是在运行时动态绑定的,而不是在编译时静态绑定的。
Java代码示例:
import java.util.Scanner;
/*
修改Goods类,变成Java开发的规范
*/
public class MyGoods {
//第一,满足封装特性,所有变量全部私有private
private String name;
private String peison;
private int num;
private double price;
// private String big_pic;
private String small_pic;
//自动产生一个无参构造
public MyGoods() {
}
//自动产生全参构造函数,主类main函数调用这个类直接传入参数,不需要在主类main中产生init方法
public MyGoods(String name, double price,String peison, int num) {
this.name = name;
this.peison = peison;
this.num = num;
this.price = price;
}
//正常逻辑中的方法
//显示所有的商品的方法show
public void show(){
//首先显示商品
System.out.println(this.name);
System.out.println(this.num);
System.out.println(this.price);
System.out.println(this.peison);
//用户调整数量
Scanner scanner = new Scanner(System.in);
System.out.println("请输入购买商品的数量");
//这里的商品数量,如果出错,要继续输入
while(true){
try{
//输入的数量直接给this.num,this指示的当前对象
this.num=scanner.nextInt();
//成功后退出循环
break;
}catch(Exception e){
System.out.println("需要重新输入商品数量,你输入的有问题,请输入整数");
}
}
System.out.println("*********************");
System.out.println("1------立即购买");
System.out.println("2-------加入购物车");
System.out.println("*********************");
System.out.println("请选择你的购买意向,输入序号");
try{
//scanner是本类中本函数的全局变量,可以在这里使用
int no=scanner.nextInt();
switch(no){
case 1:
this.buy();
break;
case 2:
this.addcar();
break;
}
}catch(Exception e) {
//如果用户输入错误,默认选择立即购买的方法
this.buy();
}
}
//立即购买的方法
public void buy(){
System.out.println("你购买了这个商品");
//这里调用Order订单类的make_order()方法,在这里产生一个空方法,在Order类中重写
this.make_order();
}
//加入购物车的方法
public void addcar(){
System.out.println("你已经把商品加入购物车");
}
//protected修饰,需要了类继承后进行重写
protected void make_order(){
//代码是由订单类做的,不是由Goods模块做的,它只能由Order的开发人员实现
}
//便于阅读,这些getter或者Setter方法放在代码的尾部
//第二,封装私有变量后,需要取值的变量用get方法,需要赋值的方法用set,即需要取值也需要赋值就是两个方法都有
//比如对name,get加上属性的首字母大写,get方法的目的是需要用户获取这个值,这里有返回值
public String getName(){
return this.name;
}
//set方法只起到一个赋值的作用,不需要返回值,因为需要赋值,必须有参数,参数name是局部变量
//一般set方法局部变量和类中属性名重名
public void setName(String name) {
this.name=name;
}
public String getPeison() {
return peison;
}
public void setPeison(String peison) {
this.peison = peison;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getSmall_pic() {
return small_pic;
}
public void setSmall_pic(String small_pic) {
this.small_pic = small_pic;
}
}