不算重零开始的java学习(一)

重复了无数次的java学习

第一篇


   写在前面,这是不是我的第一篇个人博客。之前曾经在新浪博客上学过几篇关于JavaScript的文章,然后就没有然后了。。。最近在学习java,学了几遍感觉啥都没学到,于是决定在博客上写下学习记录算是一种复习吧


NO.1

对于java而言,首先第一个要面对的问题就在于面对对象

举个例子,这里有几只动物,猫、狗、豹子。它们都有两个特性,eat以及raor。首先我们用一组图标表示出来

catdoglionleopard
eat()eat()eat()eat()
raor()raor()raor()raor()


然后我们需要讲里面共同的地方提炼出来

animal(不知道怎么让表格缩小这就很尴尬了)
eat()
raor()


catdoglionleopard
    
    


换句话说它们都是animal,并且都具有eat以及raor,因此我将它抽象为一个animal的类,然后cat类继承与animal类,依次推列;继承的同时四个子类也会继承父类的方法。

我们再进一步,不同的动物的叫声也不一样,我们不能在父类中设置所有动物都是一样的叫声。

所有我们可以这样

animal
eat()
raor()


catdoglionleopard
raor()raor()raor()raor()
    


我们在每个类中重新定义一个raor的方法,这样它会覆盖掉父类中的raor方法。

现在又有新的问题出现了,我们需要猫能够睡觉;那么我们只需要在cat中新加入一个睡觉的方法。

animal
eat()
raor()


catdoglionleopard
raor()raor()raor()raor()
sleep()   


这样当我们实例化某只动物后调用其raor方法,它就会调用定义在该动物类中的方法而不会上升到父类中去。换句话说“最低阶会胜出”,当调用eat方法时,虚拟机会冲该动物类找起,很显然并没有,于是虚拟机会一直往上找其类方法直到找到位置。

若子类在添加自定义方法后还需要调用父类的方法,则需要使用super来进行调用。当然父类是无法调用子类的方法的。


NO.2

面对对象十分重要的一点就是多态,首先让我们看看创建对象的过程。

首先Dog myDog;要求虚拟机分配空间给引用变量并将此变量命名为“myDog”,此引用变量讲永远被定义为Dog类型。

然后new Dog()创建对象,此时要求虚拟机将空间分配给新建立的Dog对象。

最后Dog myDog = new Dog(); 将新的Dog对象赋值给myDog这个引用变量。

在上述过程中,我们可以发现引用变量与对象的类型都是Dog。但是在多态下,两者可以不同

Animal myDog =new Dog();

运用多态时,引用类型可以是实际对象类型的父类。因此我们同样可以这么写:

Animal[] animals = new Animal[5];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new lion();
animals[3] = new leopart();
for(int i = 0;i<animals.length;i++){
    animals[i].eat();
    animals[i].roar();
}

参数与返回类型同样也可以多态

class Vet{
public void giveShot(Animal a){
    a.raor();
    }
}
class petOwner{
public void start(){
        Vet v = new Vet();
        Dog d = new Dog();
        Cat c = new Cat();
        v.giveShot(d);//会执行Dog的raor
        v.giveShot(c);//会执行Cat的raor
    }
}

另外在覆盖方法时应该注意,父类的方法如果是无参数且返回布尔值,那么子类覆盖的方法也必须是无参数且返回布尔值,因为虚拟机在寻找方法时会找相同的类型的方法。

NO.3

重载是两个方法名称相同但是参数不同,因此重载与多态毫无关系。重载是同一个方法有多重方式进行调用,同样,也不能返回方式不同,参数相同。

例如:

public class OverLoads{
    String uniqueID;
    public int addNums(int a,int b){
        return a+b;
    }
    public double addNums(double a,double b){
        return a+b;
    }
    public void setUniqueID(String theID){
        uniqueID = theID;
    }
    public void setUniqueID(int ssNumber){
        String numString = "" + ssNumber;
        setUniqueID(numString);
    }
}

关于面对对象的话题就想说到这里,下篇文章将深入研究多态以及相关内容。

see you

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值