java编程入门12 接口、继承与多态
eclipse的快捷方式
1)规范化 ctrl+shift+f
2)注释多行代码 ctrl+/
3)补全 Alt+/
4)功能 Alt+shift+s
继承
1.重写
1)重写(覆盖)就是在子类中将父类的成员方法的名称保留,参数列表保留,重写方法的实现内容,更改成员方法的存储权限,或修改成员方法的返回值类型(重写父类方法的返回值类型是基于J2SE 5.0版本以上编译器提供的新功能)(这种重写方法需要遵循一个原则,即重写的返回值类型必须是父类中同一方法返回值类型的子类)
2)重构:在继承中存在一种特殊的重写方式,子类与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯一不同的是方法的实现内容,这种特殊的重写方式被称为重构
3)在重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变
2.java编译器会在子类的构造函数中自动调用父类的无参构造函数
3.如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法的最后一个动作是调用父类的finalize()方法,以保证当垃圾回收 对象占用内存时,对象的所有部分都能被正常终止。
Object类
1.在Object类中主要包括clone()、finalize()、equals()、toString()等方法。
2.Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型
3.getClass()方法
getClass()方法会返回对象执行时的Class实例,使用此实例调用getName()方法可以取得类的名称
语法如下:getClass().getName();
4.toString()方法
将一个对象返回为字符串形式,在实际的应用中通常重写toString()方法,为对象提供一个特定的输出模式
5.equals()方法
equals()方法默认实现是使用"=="运算符比较两个对象的引用地址,而不是比较对象的内容,所以要真正做到比较两个对象的内容,需要在自定义类中重写equals()方法
public static void main(String[] args) { String s1="123"; String s2="123"; System.out.println(s1.equals(s2));//true V v1=new V(); V v2=new V(); System.out.println(v1.equals(v2)); //false }
对象类型的转换
1.向上转型 将子类的对象看作是父类对象被称为"向上转型"
2.向下转型 显示类型转换,将父类对象强制转换为子类对象
public static void main(String[] args) { father ob=new son(); son ob1=(son)ob;//强制转换为子类对象 ob1.fun(); }
注:在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException异常
使用instanceof操作符判断对象类型
1.一个实例对象是否属于一个类
1)语法格式:myobject(某类的对象引用) instanceof ExampleClass(某个类)
2)使用instanceof操作符的表达式返回值为布尔值,true代表myobject对象是ExampleClass的实例对象。false表示不是。
2.一个类是否实现了某个接口
1)语法格式:myobject(某类的对象引用) instanceof ExampleInterface(某个接口)
2)true代表myobject类实现了ExampleInterface接口。false表示没有。
不定长方法
1.语法:
返回值 方法名(参数数据类型...参数名称)
在参数列表中使用"..."形式表示不定长参数,其实这个不定长参数a就是一个数组,编译器会将(int...a)形式看作是(int []a)
public static int add(int ...a) { int s=0; for(int i=0;i<a.length;i++) { s+=a[i]; } return s; } public static void main(String[] args) { int sum=add(1,2,3,4,5); System.out.println(sum); }
接口
1)接口中的定义的任何字段都自动是static和final的
2)接口中的方法自动是public abstract的
2018-12-20