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

原创 2016年08月30日 21:51:59

重复了无数次的java学习

第一篇


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


NO.1

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

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

cat dog lion leopard
eat() eat() eat() eat()
raor() raor() raor() raor()


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

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


cat dog lion leopard
       
       


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

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

所有我们可以这样

animal
eat()
raor()


cat dog lion leopard
raor() raor() raor() raor()
       


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

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

animal
eat()
raor()


cat dog lion leopard
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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

public class Song{ String title; public Song(String t){ title = t; } public ...

Java学习从零开始

  • 2013-01-01 22:36
  • 16.93MB
  • 下载

java 从零开始,学习笔记之基础入门<SQL_Server_常用查询>(二十二)

SQL_Server_常用查询 --创建一张person表tb_person --表中的字段pid(id) pname(姓名) pass(密码) psex(性别) pcomp(公司) ...

java 从零开始,学习笔记之基础入门<servlet_文件下载>(二十七)

servlet_文件下载 文件下载 1.        利用BufferedInputStream读取服务器上的文件 2.        ...

java 从零开始,学习笔记之基础入门<三大框架整合>(四十二)

Hibernate-Spring-Struts 页面部分(注册和注册成功) 注册 Index.jsp page language="java" impo...

java 从零开始,学习笔记之基础入门<封装类>(十一)

封装类 Integer这个类的介绍: package com.ibm.four;   public class Test {     public static void ...

从零开始学习JAVA

java基础知识几乎为空白,很想系统学习学习。在网上查了写资料,也问了问前辈;前辈说:  servlet->jsp->设计模式->struts->hibernate->spring沿着这条路,一步一步...

java 从零开始,学习笔记之基础入门<Hibernate_配置详解>(三十六)

Hibernate 使用Hibernate的三个准备: 1.        导入Hibernate库(jar包) 2.       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)