成员变量 V/S 局部变量
成员变量:又叫属性,声明于类中方法外,作用范围所在的类(可放在最前面或最后面没什么影响),成员变量不必初始化系统会自动给初始化。
局部变量:声明于方法体中,作用范围所在的方法中,局部变量必须初始化否则报错。
成员变量和方法
成员变量:又叫属性、静态属性,每个实例出来的对象都有一份(所占内存空间不同)
方法:即其他语言中的函数,又叫动态属性,所有实例出来的对象共享同一个方法
类和对象的概念
类: 类是具有共同特征的一类事物的一个抽象。类是用来创建同一类型的对象的“模版”,在一个类中定义了该类对象应具有的成员变量和方法。
对象:又叫实例,是类的一个具体的实例。对象可以看成静态属性(成员变量)和动态属性(方法)的封装体
类与类之间的关系
关联:即A类中的方法的参数是B类的一个对象。(弱)
继承:XX 是一种 XX。(一般和特殊)
聚合:XX 是 XX的一部分。(整体和部分)
聚集
组合
实现:子类实现父类中的方法
多态
构造方法
构造方法名和类名相同且构造方法名前必须什么修饰也没有(void ,public, int等都不能加否则就变成普通的方法了而不是个构造方法了)。
方法的重载
方法的重载:指的是同一个类中的多个方法的方法名字相同,参数不同(参数的类型不同或参数的个数不同)。与访问权限修饰符和返回值类型没关系。一个原则:只要调用的方法能够被正确区分,那么这几个方法就构成重载。
关键字之this
This是指调用当前方法的对象的引用。
This可以用来区分成员变量和局部变量重名。
This可以看成是一个变量,它的值是当前对象的引用。
关键字之static
用Statics声明 的方法为静态方法,在调用该方法时,不会将该对象的引用传递给它。
所以,在static方法中不可以访问非static的成员(成员指成员变量和方法)这是因为静态方法不再是针对某个对象调用,所以不能访问非静态成员。
静态的成员变量或是方法可以直接用类名.成员变量名或类名.方法名来调用。
继承
子类extends父类,即表示拥有父类(基类)的所有成员(成员变量和方法)private类型的有拥有全没使用权。
Java中只支持单继承不允许多继承。子类只能有一个基类,一个基类可以派生出多个子类。
访问控制
Java权限修饰符private,protected,public放在类成员的定义前。用来限定其他对象对该类对象成员的访问权限。
修饰符
类内部
同一个包
子类
任何地方
Private
Yes
Default
Yes
Yes
Protected
Yes
Yes
Yes
Public
Yes
Yes
Yes
Yes
对class的权限修饰符只可以用public和default
public 可以在任何地方被访问
default只可以被同一个包内部的类访问。
方法的重写
子类可以根据需要从对基类(父类) 中继承来的方法进行重写。
重写方法必须和被重写方法具有相同的方法名,相同的参数列表,形同的返回类型(也就是完全一样,一定要Copy避免不必要的麻烦)
重写的方法不能使用比被重写方法更严格的访问权限。
关键字之super
Super用来引用基类的成分
继承中的构造方法
子类的构造过程中必须首先调用其基类的构造方法(先调父类的构造方法然后才是自己的)。
子类可在自己的构造方法中使用super(参数列表)调用基类的构造方法。
使用this(参数列表)调用本类的另外的构造方法。
如果调用super,必须写在子类构造方法的第一行。
如果子类没有显示的调用基类的构造方法,则系统默认调用基类无参数的构造方法。
如果没显示的调基类的构造方法且基类中没有无参数的构造方法,则编译出错。
Objiect 类
Objiect 类是所有Java类的根基类。
如果在类的声明中没有使用extends指明其基类则默认其基类为Object
public class person {}
等价于
public class person extends Object {}
Object之toString()
Object类中的toString()是打印出对象的类名@哈希码
String类中的toString()是答应出对象的值。
一般重写toString()方法。
hashcode(哈希码)独一无二的代表了一个对象,并且通过这个哈希编码可以找到这个对象所在的位置。
Object之equals
Object类的equals方法提供了逻辑上的相当判断,A.equals(B),当且仅当A、B这两个引用指向同一个对象时返回true。String类中的是指两个字符串相相同时返回true。不同的类的equals方法的实现不同,一般重写equals()方法。
对象转型
一个基类的引用类型变量可以“指向”其子类的对象。
一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
可以使用引用 变量 instanceof 类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类。
子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
多态
动态绑定是指在执行期间(而非编译期间)判断引用对象的实际类型,根据其实际的类型调用其相应的方法。
抽象类
用abstract关键字来修饰一个类时,这个类叫抽象类;用abstract来修饰一个方法时,该方法叫抽象方法。(抽象的方法在方法名后不能再加{}否则报错)
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象的方法必须被重写。
抽象的类不能被实例化。
抽象方法只需声明,而不需实现。
关键字final
final的变量值不能够别改变
final的成员变量
final的局部变量(形参)
final的方法不能够被重写。
final的类不能够被继承。
接口
接口(interface)是抽象方法和常量值的定义的集合。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
implements 接口后,必须重写此接口中的所有抽象方法。
接口interface
多个无关的类可以实现同一个接口。
一个类可以实现多个无关的接口。
与继承关系类似,接口与实现类之间存在多态性(接口相当于例子中的父类Animal)。
接口的特性
接口可以实现多重继承。
接口中声明的属性默认为public static final 的:也只能是public static final 的。
接口中只能定义抽象方法,而且这些方法默认为public的:也只能是public的。
接口中的方法都是抽象的,接口中的属性都是终态的。写不写修饰系统都给你自动默认。说白了接口就是一个特殊的抽象类。