不算重零开始的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 从零开始,学习笔记之基础入门<SQL_Server_常用查询>(二十二)

SQL_Server_常用查询 --创建一张person表tb_person --表中的字段pid(id) pname(姓名) pass(密码) psex(性别) pcomp(公司) ...
  • lulu147
  • lulu147
  • 2013年11月25日 09:44
  • 2523

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

SQL_Server   数据库安装完成之后,那么需要对应的启动数据库,在启动之前,需要保证数据的服务处于开启状态:在服务中-》SQL server处于运行状态 数据库创建出来之后,建议不要修改计算机...
  • lulu147
  • lulu147
  • 2013年11月22日 10:51
  • 1373

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

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

Java编程规范-从零开始学习

  • 2009年10月13日 10:35
  • 122KB
  • 下载

从零开始学习Java Web(一):在代码中了解HTTP协议

什么是HTTP协议?以前看完了百度百科一大篇幅下来,似懂非懂,过了两天,根本忘记了它到底是个什么神秘的存在。     我:小A,你知道HTTP协议是什么东西吗,给我科普一下?     小A:知道啊...
  • imhxl
  • imhxl
  • 2017年05月23日 21:25
  • 417

从零开始学习Java Web(二):初步认识Servlet

这一章我们不深究Servlet是什么,我们来讲讲Servlet有什么。首先先新建一个class,继承HttpServlet,然后重写Servlet生命周期的三个重要方法。 package com...
  • imhxl
  • imhxl
  • 2017年05月25日 20:35
  • 426

java 从零开始,学习笔记之基础入门<jsp>(二十六)

jsp Jsp (javaServer page)    主要是用来接收客户端的请求,然后对此jsp文件进行编译生成一个servlet文件,然后再执行编译之后的文件,处理之后得到对应的处理之后的资源,...
  • lulu147
  • lulu147
  • 2013年11月29日 10:23
  • 1268

java 从零开始,学习笔记之基础入门(一)

Java技术体系的三个方向:j2ee(面向企业级开发),j2se(面向个人),j2me(面向手机开发)  Java是一门强类型语言,主要体现在对变量类型的定义有严格的类型规定,如果是int就必须定义一...
  • lulu147
  • lulu147
  • 2013年10月25日 17:26
  • 1691

2、从零开始学习JAVA--Hello World

步骤: 1、将Java代码编写到扩展名为.java的文件中。 2、通过Javac命令对该java文件进行编译。 3、通过java命令执行生成的class文件。 1、Hello World代码: cla...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不算重零开始的java学习(一)
举报原因:
原因补充:

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