方法重载(overload)
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时根据不同的参数列表选择对应的方法 this
在类的方法定义中使用this关键字代表使用该类的对象的引用 有时使用this可以处理方法中成员变量和方法参数重名的问题 This可以看做是一个变量,它的值时当前对象的引用 public class Leaf{ int I = 0;
Leaf(int i) { this.i = i}; Leaf increament() {
i++;
return this; }
void print() {System.out.println(“i = ” + i);} public static void main(String[] args) { Leaf leaf = new Leaf(100);
leaf.increament().increament().print(); } }
static
在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份 用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员
静态方法不再是针对某个对象调用,所以不能访问非静态成员 可以通过对象引用或类名(不需要实例化)访问静态成员或方法
package&import
为了解决类的命名冲突问题,Java引入的包(package)机制,提供类的多重类命名空间
package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包,裸体类)
Java编译器把包对应于文件系统的目录管理,package语句中,用“.”来指明包(目录)的层次,例:package com.yao;则该文件中的类位于.\\com\\yao目录下
如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.yao.MyClass),Java编译器才会找到该类 也可以使用import在文件的开头引入要使用的类,例:import com.yao.MyClass 可以不需要用import语句直接使用java.lang包中的类
访问位于同一个包中的类不需要引入
class文件的最上层包的父目录必须位于classpath下
JDK中主要的包介绍
java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能,使用时不需要引入(lang-language) java.awt-包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI) java.applet-包含了applet运行所需的一些类 java.net-包含了与网络相关的操作的类
java.io-包含能提供多种输入/输出功能的类
java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数
java运行时所需的类位于jdk\\jre\\lib\\rt.jar 打jar包,定位到需要打包的最上层的父路径
jar –cvf xxx.jar *.* (*.*指目录中所有文件夹打包) jar包也可设为classpath变量
继承extends
通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)(包括private成员,拥有私有变量的所有权,但无使用权)
Java只支持单继承,不允许多继承,一个子类只能有一个基类,一个基类可以派生多个子类
访问控制
权限修饰符public、protected、private、default(包访问权限) 修饰符 类内部 同一个包 子类 任何地方 private √ X X X default √ √ X X protected √ √ √ X public √ √ √ √ 对于class的权限修饰符只可以用public和default public类可以在任意地方被访问
default类只可以被同一个包内的类访问
方法重写overwrite/override
在子类中可以根据需要对从基类中继承来的方法进行重写
重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型 重写方法不能使用比被重写方法更严格的访问权限
super
在Java类中使用super来引用基类的成分
继承中的构造方法
子类的构造过程中必须调用其基类的构造方法
子类可以再自己的构造方法中使用super(argument_list)调用基类的构造方法
使用this(argument_list)调用本类的另外的构造方法 如果调用super,必须写在子类构造方法的第一行 如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用调用基类无参数的构造方法
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错
Object类
Object类是所有Java类的根基类
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类 public class Person { … }
等价于:
public class Person extends Object { … }
toString()
Object类中定义有public String toString()方法,其返回值时String类型,描述当前对象的有关信息,返回一个字符串,该字符串由类名(对象是该类的一个实例)+ “@” +此对象哈希码的无符号十六进制表示组成,即getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) 在进行String与其他类型数据的连接操作时(如:System.out.println(“info” + person)),将自动调用该对象类的toString()方法
可以根据需要在用户自定义类型中重写toString()方法,建议所有子类都重新此方法
equals()
public boolean equals(Object obj)
x.equals(y)对于任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true(x==y具有值true)
JDK提供了一些类,如String,Date等,重写了Object的equals()方法,调用这些类的equals()方法,x.equals(y),当x和y所引用的对象时同一类对象且属性内容相等时(并不一定时同一对象),返回true,否则返回false 建议重写 例子:
String s1 = new String(“Hello”); String s2 = new String(“Hello”);
System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true
对象转型(casting)
一个基类的引用类型变量可以“指向”其子类的对象
一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)
可以使用 引用变量 + instanceof + 类名,来判断该引用变量所“指向”的对象是否属于该类或该类的子类
子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为乡下转型(downcasting),需强制转换
动态绑定和多态
动态绑定是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应的方法
1.要有继承 2.要有重写
3.父类引用指向子类对象
抽象类
用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象方法只需声明,而不需实现
final
final的变量的值不能被改变 final的方法不能被重写 final的类不能被继承
接口interface 实现implements
接口是抽象方法和常量值得定义的集合 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含了常量和方法的定义,而没有变量和方法的实现 多个无关的类可以实现同一个接口 一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性 接口中声明属性默认为public static final的,也只能是public static final的
接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的
接口可以继承其他的接口,并添加新的属性和抽象方法
相关推荐: