面向对象
java是一门面向对象的语言,因此在正式学习java前,先来了解一下什么是面向对象?
面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象是类的具体化实现。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。
面向对象的三大特性:封装、继承、多态
封装是指属性私有化,目的是增强数据安全性,不能让其他用户随意访问和修改数据,简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员
- 根据需要提供setter和getter方法来访问属性
- 隐藏具体属性和实现细节,仅对外开放接口
- 控制程序中属性的访问级别
例如以下代码:
在User类中,定义了三个成员变量,分别为idCard,name,user,它们的访问修饰都是private私有的,通过setter和getter方法对这些变量进行设值以及取值.
public class User {
private String idCard;
private String name;
private User user;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。但父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。
- java中一个类只能继承一个父类,且只能继承访问权限非private属性和方法
- 子类可以重写父类中的方法,命名与父类中同名的属性
例如以下代码,在父类中分别定义了一个私有变量height、一个公有变量weight、一个私有方法showHeight()以及一个公有方法showWeight();
在子类中分别调用和重写,私有的变量和方法子类无法访问到,子类只访问到了一个公有变量和方法,且子类重写了父类的公有方法showWeight();
父类:
public class User {
private String idCard;
private String name;
private int height=180;//父类私有变量
public int weight=90;//父类公有变量
private User user;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//父类私有方法
private void showHeight() {
System.out.println("user showheight:"+height);
}
//父类公有方法
public void showWeight() {
System.out.println("user showheight:"+weight);
}
}
子类:
public class Women extends User{
@Override
public void showWeight() {
System.out.println("user showheight:子类的体重为"+weight);
}
public static void main(String[] args) {
Women women=new Women();
// women.height=150; //子类对象对父类的私有成员变量使用报错
women.weight=88;//子类对象对父类的公有成员变量使用正常
// women.showHeight(); //子类对象调用父类的私有方法使用报错
women.showWeight(); //子类对象调用父类的私有方法使用正常
}
}
多态可以分为两种:设计时多态、运行时多态
设计(编译)时多态:即重载(Overload),是指java允许方法名相同而参数不同(返回值可以相同也可以不同),同一个类中允许存在一个或多个以上的同名函数,只要参数类型或参数个数不同即可
运行时多态:即重写(Override)必须是在继承体系中,子类重写父类方法,JVM运行时根据调用该方法的类型决定调用那个方法。
代码如下例所示
public class Women extends User{
int CurrentWeight;
//重写showWeight方法
@Override
public void showWeight() {
System.out.println("user showheight:子类的体重为"+weight);
}
//重载showWeight方法
public void showWeight(int CurrentWeight) {
System.out.println("当前体重为"+CurrentWeight);
}
public static void main(String[] args) {
Women women=new Women();
// women.height=150; //子类对象对父类的私有成员变量使用报错
women.weight=88;//子类对象对父类的公有成员变量使用正常
// women.showHeight(); //子类对象调用父类的私有方法使用报错
women.showWeight(); //子类对象调用父类的私有方法使用正常
women.showWeight(66);//重载的方法
}
}