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

posted @ 2018-12-20 14:23  CCSU_CBG  阅读(116)  评论(0编辑  收藏  举报