Java笔记(第八节)

本节内容:(Object, 多态,instanceof , 重名函数覆盖思想,eclipse小技巧)

Object:Java的类默认 extends Object

为什么?

通过Object 这个父类可以增加一些函数例如finalize来实现垃圾回收等功能.

好处:可以在Vector中v.add(new Cust())即添加对象 ,可以在Vector中强制类型转换.

多态

1:即使父类的引用指向了子类对象,也无法直接调用子类新定义的成员
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        A a = new B();
        a.print();       
    }
}
class A{
    
    
}
class B extends A
{
    void print()
    {
       System.out.println("HEllo");
        
    }
}
报错:
cannot find symbol
a.print();
2:但可以通过强制类型转换地把父类地引用强制转换成子类地引用,然后进行调用(有可能出错)
import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        A a = new B();
        B tmp = (B) a;
        tmp.print();
    }
}
class A{
    
    
}
class B extends A
{
    void print()
    {
        System.out.println("HEllo");       
    }
}
输出:HEllo

二元运算符 instance of
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:
  String s = "I AM an Object!";
  boolean isObject = s instanceof Object;
我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。

摘用粉丝的代码:

import java.util.*;
public class Main 
{
    public static void main(String[] args) throws Exception
    {
        MB mb = new MB();
        USB ust = new USt();//父类指向子类的对象
        USB mp3 = new MP3();
        mb.useUSB(ust);
        mb.useUSB(mp3);
    }
}
class MB 
{
    void useUSB(USB usb)//父类的引用指向子类的对象,父类的引用不能直接调用子类新的方法
    {
        if(usb instanceof USt) {
            USt temp = (USt)usb;//强制转化为子类就可以调用新的——间接调用
            temp.print2();
        }
        else 
        {
            MP3 temp = (MP3)usb;
            temp.open();
        }
        
    }
    void print()
    {
        System.out.println("这是主板");
    }
}

class USB
{
    void print1()
    {
        System.out.println("这是USB");
    }
}

class USt extends USB//子类
{
    void print2()
    {
        System.out.println("这是USt");
    }

}

class MP3 extends USB
{
    void open()
    {
        System.out.println("MP3 open");
    }
}
输出:
这是USt
MP3 open

不过一般不用这种方式,而是通过run方法覆盖的方式来避免类型转换.
在此程序中,通过print重名函数覆盖的方式实现向下兼容
package caipiao;
import java.util.*;
import java.util.Vector;
public class caipiao 
{
    public static void main(String[] args) throws Exception
    {
        MB mb = new MB();
        USB ust = new USt();
        USB mp3 = new MP3();
        
        mb.useUSB(ust);
        mb.useUSB(mp3);
    }
}
class MB 
{
    void useUSB(USB usb)//父类的引用指向子类的对象,父类的引用不能直接调用子类新的方法
    {
        usb.print();
    }
    void print()
    {
        
    }
}

class USB
{
    void print()
    {
        System.out.println("这是USB");
    }
}

class USt extends USB//子类
{
    void print()
    {
        System.out.println("这是USt");
    }

}

class MP3 extends USB
{
    void print()
    {
        System.out.println("MP3 open");
    }
}
class MP4 extends USB
{
    void print()
    {
        System.out.println("MP4 open");
    }
}
输出:
这是USt
MP3 open

可以发现,我们省去了判断usb 类型的过程,也就是不用instanceof函数啦]

向下兼容亦是如此,像老师所说,如果后续还有MP4,MP5之类横空出世,我们只需要加两行代码,而不需要修改USB
加上class MP4, USB mp4 = new MP4(),mb,useUSB(mp4)就可以完成MP4的添加
package caipiao;
import java.util.*;
import java.util.Vector;
public class caipiao 
{
    public static void main(String[] args) throws Exception
    {
        MB mb = new MB();
        USB ust = new USt();
        USB mp3 = new MP3();
        USB mp4 = new MP4();
        
        mb.useUSB(ust);
        mb.useUSB(mp3);
        mb.useUSB(mp4);
    }
}
class MB 
{
    void useUSB(USB usb)//父类的引用指向子类的对象,父类的引用不能直接调用子类新的方法
    {
        usb.print();
    }
    void print()
    {
        
    }
}

class USB
{
    void print()
    {
        System.out.println("这是USB");
    }
}

class USt extends USB//子类
{
    void print()
    {
        System.out.println("这是USt");
    }

}

class MP3 extends USB
{
    void print()
    {
        System.out.println("MP3 open");
    }
}
class MP4 extends USB
{
    void print()
    {
        System.out.println("MP4 open");
    }
}
输出:
这是USt
MP3 open
MP4 open

###

一些eclipse小技巧(课上)

1:快速定位菜单
window -> show view ->outline

即可出现这个界面,可以快速定位到每一个类以及函数,以进行修改.

2:修改字体大小

window -> Preferences -> General ->Apperance -> Colors and Font ->Java Eidtor Text Font(over.....)

3:快捷键 Alt + / 进行代码补全

4: source -> Generate Constructor using Fields 可以快速创建构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值