1.类:
一种定义了具有成员变量和成员方法的抽象数据类型。
2.对象:
实实在在的物品便是对象。把这类物品共有的属性及功能抽象出来描述一种事物,便称之为类。因此,类就是一种定义的具有成员变量和成员函数的抽象数据类型。
3.封装,继承,多态
封装
封装,将一个功能的实现封装成对外提供可调用的、稳定的功能。封装可以使类具有独立性和隔离性,保证类的高内聚;避免使用非法数据赋值,降低代码出错的可能性,便于维护;避免类内部实现发生改变时,导致整个程序的改变。根据封装类的实现依赖类的修饰符(public、private、protected、默认、private、)来控制封装类的使用权限。
继承
继承,正如其名就是继承上一代的东西。继承某对象的属性和方法,并且自己还可以扩展自己的属性和方法。通常具有继承关系的类被称为子类和父类。子类继承自父类。一般通用的属性和方法都放在父类,子类继承后也有这些属性和方法,并可以添加自己的属性和方法。一个类只能继承一个父类。Object是最上级的父类。如果未写继承关系,默认继承自Object类。所以默认的类都有equals、hashCode、notify方法
多态
多态,多态是在继承的基础上实现的。多态的三要素:继承、重写和父类引用指向子类对象。父类引用指向不同子类对象时,调用相同的方法,呈现出不同的行为就是类多态特性,还要接口多态。
多态可以分为编译时多态和运行时多态。
多态的意义:一个类型的引用在指向不同的对象时会有不同的实现;当然同样一个对象,造型成不同的类型时,也会有不同的功能。
向上造型:一个类的对象可以向上造型的类型有:父类的类型;其实现的接口类型。
强制转型:可以通过强制转换将父类型变量转换为子类型变量,前提是该变量指向的对象确实是该子类类型;也可以通过强制转换将变量转换为某接口类型,前提是该变量指向的对象确实实现了该接口。如果强制转换违背了这两个前提,将抛出异常ClassCastException。instanceof关键字:为了避免ClassCastException,可以通过
instance of关键字判读某个引用指向的对象是否可以强制为某类型。
4.重载和重写的区别:
重载是指在一个类中定义多个方法名相同参数列表不同的方法。在编译时,根据参数个数和类型来决定绑定哪个方法。
重写是指在子类中定义和父类完全相同的方法。在运行时,根据对象的类型不同(不是引用类型)来调用不同的方法实现。
5.修饰符限定范围:
修饰符 本类 同一个包中的类 子类 其他类
public 可以访问 可以访问 可以访问 可以访问
protected 可以访问 可以访问 可以访问 不能访问
默认 可以访问 可以访问 不能访问 不能访问
private 可以访问 不能访问 不能访问 不能访问
6.static关键字:
6.1.被static关键字修饰的变量或者方法不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名来进行访问。static可以修饰类的成员变量、成员方法,另外还可以编写static代码块来优化程序性能。
6.2.static修饰成员变量:static变量也称为静态变量,静态变量和非静态变量的区别:静态变量被所有对象所共享,在内存中只有一个副本,只有当类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量和类的信息存储在方法区,而不是在堆中,一个类的static成员变量只有“一份”。操作该变量,会影响到其他对象的访问。
6.3.static修饰方法:static方法一般被称为静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对静态方法来说,是没有this的。所以在静态方法中不能访问非静态成员变量和非成员方法,因为非静态成员变量/方法都必须依赖于具体的对象。static方法的作用一般就用于提供一些“工具方法”和“工厂方法”。最常见的static方法就是main方法,因为执行main方法时没有创建任何对象,所以只有通过类名来访问。eg:Math.sin(); Arrays.sort();
static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,一般用于加载静态资源或者加载一些配置等。
7.final
final修饰变量,变量的值或者引用的对象不能改变。修饰成员变量必须初始化:声明时初始化或构造函数中初始化。也可以修饰局部变量,在使用之前初始化即可。
final修饰方法,子类不能重写该方法。作用用于锁定方法,防止任何继承他的类修改内部实现。类的private方法会被隐式地指定为final方法。
final修饰类,该类不能被继承。final类中的成员变量可根据需要自行设定为final变量,final类中的成员方法会被隐式地指定为final方法。常见的final类:String类、Math类...
static final修饰的成员变量被称为常量,必须声明时同时初始化,不可被修改。通常常量命名都是大写。常量在编译期会被替换。
8.abstract
abstract抽象,修饰类和和方法,被称为抽象类和抽象方法。
抽象类,抽象类不能实例化,不能生成对象实例,但是可以作为对象变量声明的类型,也就是编译时类型,需要子类继承并实现抽象方法。
抽象方法,抽象方法只有方法的定义,没有方法体的实现,用分号结尾。eg:public abstract double area(); // public abstract 可以省略
一个类中如果包含抽象方法,该类也必须声明为抽象类;如果一个类继承了抽象类,必须重写其抽象方法或者该类也声明为抽象类;abstract和final关键字不可以同时修饰一个类,因为final类不可继承,abstract类如果不继承就没有意义。抽象类的意义:为子类提供公共的类型;封装子类中重复内容(成员变量和方法);提供统一方法定义,但是子类可以有不同的实现。
9.interface
接口可以看作是特殊的抽象类。只包含抽象方法,不能定义成员变量,但是可以定义常量。
接口实现:实现用implements关键字实现一个接口。一个类可以实现多个接口,之间用逗号隔开。必须实现这些接口的方法。
接口继承:和类继承一样,子接口继承了父接口中定义的方法。
抽象类和接口:抽象类可以抽象公共的属性和方法,作为父类的存在,它定义的抽象方法也可以被子类有不同的实现。接口着重于方法定义,实现接口就有不同的行为。接口可以实现多个,抽象类只能继承一个。
10.this
代表当前对象
11.super
代表父类,super();调用父类无参构造器