面向对象总结
1.面向过程和面向对象的区别及概念
面向过程关注的是程序的执行过程,面向对象关注的是具有这个程序功能的集合对象。执行者转为了指挥者。
比如:如果问题改成: 把100只大象依次关进冰箱,共分为几步?
面向过程的回答: 此处需要省略N字。。。
面向对象的回答还是2步:
1招一个能操作冰箱的工人(对象) , 2指挥工人把大象依次装进去。
类与对象
类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。类是一个实物的设计图纸由属性和方法组成,对象是图纸做出的包含各种特征的实物,创造出来以后才具有实物功能。所以类必须通过对象才可以从理论变成现实来使用,对象中所有的操作都要在类(图纸)上先定义出来。
对象与内存分析
创建对象格式:类名称 对象名称 = new 类名称() ;
new表示申请内存空间,实例化对象、创建对象
封装性(三大特征之一)
概念:隐藏对象的属性和实现细节,仅对外公开接口,为其提供setter及getter方法进行设置和取得操作。
构造方法
Person p = new Person();
在右侧Person后面出现的小括号, 其实就是在调用构造方法 !
用于对象初始化。
所有的类都至少有一个构造方法(无参、有参)
方法名称必须与类名相同, 没有返回值类型的声明
方法重载:方法名称相同, 参数类型或参数长度不同, 可以完成方法的重载
static关键字
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
并且不会因为对象的多次创建 而在内存中建立多份数据
使用static关键字修饰一个属性:声明为static的变量实质上就是全局变量
使用static关键字修饰一个方法:在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
使用static关键字修饰一个类:
在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
继承(三大特征之一)
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
父类-子类
格式:
[访问权限] class 子类名 extends 父类名{
类体定义;
}
protected,修饰的属性或方法可以被子类继承
方法的重写
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
父类中的方法若使用private、static、final任意修饰符修饰,那么,不能被子类重写。
抽象类
抽象类必须使用abstract class声明
在抽象类的使用中有几个原则:
· 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。
· 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。
接口
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。
如果一个接口要想使用,必须依靠子类。 子类(如果不是抽象类的话)要实现接口中的所有抽象方法。
多态性
多态:就是对象的多种表现形式,(多种体现形态)
重载: 一个类中方法的多态性体现
重写: 子父类中方法的多态性体现。
对象的多态性
instanceof关键字
判断某个对象是否是指定类的实例,则可以使用instanceof关键字
实例化对象 instanceof 类 //此操作返回boolean类型的数据
if(a instanceof b){
//…
}
判断一个对象a是否为某个类b的实例,1 or 0
内部类
内部类就是在一个类的内部定义的类。
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
广泛意义上的内部类一般来说包括这四种:
1、成员内部类
2、局部内部类
3、匿名内部类
4、静态内部类
1.成员内部类
成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:
class Outer {
private double x = 0;
public Outer(double x) {
this.x = x;
}
class Inner { //内部类
public void say() {
System.out.println(“x=”+x);
}
}
}
2、局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或
者该作用域内。
public People getPerson(){
class Student extends People{ //局部内部类
int age =0;
}
return new Student();
}
3.匿名内部类
new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}
(1)不能有构造方法,只能有一个实例。
(2)不能定义任何静态成员、静态方法。
(3)不能是public,protected,private,static。
(4)一定是在new的后面,用其隐含实现一个接口或继承一个类。
(5)匿名内部类为局部的,所以局部内部类的所有限制都对其生效
4.静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。
public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter.Inner();
}
}
class Outter {
public Outter() {
}
static class Inner {
public Inner() {
}
}
}
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。