面向对象三大特征的部分小结
1.什么是封装?为什么需要封装?
将一个数据和行为装在一个类中,对外提供访问接口;
使用访问限定符来对类,属性和方法的可访问范围进行限定,然后再根据需要对外提供访问接口;
public //公共的 随处可访问的
protected //受保护的 同包中的类及其子类可访问
default //缺省的 在同包的类可访问
private //私有的 本类中可访问
1、 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作的负担。2、对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
参考资料来源:百度百科-封装 (计算机程序术语)
2.构造方法和成员方法的区别
构造方法不用声明返回值类型,成员方法必须要声明;
构造方法的名字必须和类名一致,成员方法的名字可以随便定义;
构造方法一般通过new关键字来调用,成员方法一般通过对象来调用.
构造方法的重载:
在一个类中定义多个构造方法,只要参数列表不同(参数的个数,类型或者顺序不同);
每个类都有一个默认无参数的构造方法;
当重载了构造方法之后,默认的构造方法就失效了;
如果在重载了构造方法之后,还需要使用无参构造方法, 就必须要显式声明.
成员方法的重载:
在同一个类中,可以定义多个同名不同参数列表的方法.
3.什么是继承?如何继承?为什么需要继承?
继承在本质上是特殊一般的关系,即常说的is-a关系;子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
//学生类(父类,基类,超类)
public class Student{
protected String name;
private int num;
public void setName(String s){
name=s;
}
public void setNum(int t){
num=t;
}
public void study(){
System.out.println(name+","+num+"在学习");
}
}
//大学生类,继承学生类(子类,扩展类,派生类)
public class Undergraduate extends Student{
//子类特有的方法
public void cet(){
System.out.println(name+"要参加英语四六级考试");
}
//重写从父类继承来的方法
public void study(){
System.out.println(name+"是大学生,在学习");
}
}
继承的目的:
1.为了反映现实中真实的类与类之间的关系;
2.子类可以继承到父类中的属性和方法,减少代码的冗余;
4.子类特有的方法的调用
子类可以定义自己特有的属性和方法,对父类进行扩展,子类特有的属性和方法,必须是子类类型的对象才能调用,对象要声明成子类类型,当子类对象自动转型成父类类型之后,如果要需要调用子类特有的方法,则需要强制转成子类类型;
5.子类重写之后的方法的调用
子类可以重写(覆盖)从父类继承来的方法,在子类中定义一个和父类中同名,同参数,同返回值的方法,子类对象无论是声明成子类类型还是父类类型,都会调用重写之后的方法.
6.类型的自动转换和强制转换
Java中的基本数据类型
//整数
byte //-128~127
short //-32768~32767
int //-21亿~21亿
long //-922亿亿~922亿亿
//浮点数
float //+-3.4E38
double //+-1.7E308
//字符型
char //0~65535
//布尔型
boolean //0 1
范围的大小:
byte<short<int<long<float<double
char<int
自动转换:数据的类型从小的范围到大的范围可以自动转换
byte a=100;
int b=a;
强制转换:数据的类型从大的范围到小的范围需要强制转换
int a=100;
byte b=(byte)a; //注意:基本数据类型中强制转换可能会造成数据的溢出
7.多态
同一种类型的对象,在执行相同的方法,得到的结果可能不一样.
由于重写机制导致的多态—动态多态;
由于重载机制导致的多态—静态多态.