码迷,mamicode.com
首页 > 其他好文 > 详细

2016/5/17学习记录

时间:2016-05-18 00:02:08      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

1出现void is an invalid type for the variable的情况的解决方案。

  void is an invalid type for the variable d的意思是:
  变量d不支持void类型
  第一步:检查拼写是否错误; 
  第二步:检查函数的位置,尤其是存在嵌套关系的函数。

  今天我联系继承的时候把定义函数的部分写在了main函数里,跳出了这样的问题,后来经过排查发现输错了位置。

2今天的代码,主要是学习了继承,简单的例子,用到了ArrayList容器的方法。

package dome;

import java.util.ArrayList;

public class Database {
//  定义一个容器,容器items中的对象是Item类型的;
    private ArrayList<Item> items =new ArrayList<Item>();

//    定义函数将对象i放入容器中。    
    public void add(Item i){
        items.add(i);}
//    定义list函数,函数让items中的每个对象进行print操作,print操作在Item中定义
    public void list(){
        for(Item i:items)
            i.print();
        System.out.println();
    }
    
        
        
        public static void main(String[] args) {
        // TODO Auto-generated method stub
    Database db=new Database();
    db.add(new CD("Hello",1));
    db.add(new DVD("funny","dog"));
    db.list();
    }
    
    

}
package dome;

public class Item {
//    初始化Item类的参数
    private String title = "";
//     写构造函数对对象进行初始化    
    public Item(String title)
    {
        this.title=title;
    }
//     写函数,输出参数。完成任务
    public void print(){
        System.out.println(title);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
    
        
    }

}
package dome;

public class CD extends Item {
//     初始化参数    
    private int num;
//    写构造函数,对象参数初始化
    public CD(String t,int i) {
        super(t);
        this.num=i;
    }
//  写print函数,输出对象参数。调用父类时,用super.的方式调用
    public void print(){
        super.print();
        System.out.println(num);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//  初始化对象cd;调用自己的函数print
    CD cd=new CD("hello",7);
    cd.print();
    }

}
package dome;

public class DVD extends Item {
//  初始化参数
    private String ss="";
//  定义构造函数,初始化变量;    
    public DVD(String title,String ss)
    {
        super(title);
        this.ss=ss;
    }
//     定义函数,用super.的方式调用父类,输出参数;
    public void print(){
        super.print();
        System.out.println(ss);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    DVD dvd = new DVD("HHHHH","WHY");
    dvd.print();
    }

}

 3.可以初始化CD类型的对象cd后,使用Item i = cd;说明子类的对象可以直接赋值给父类的对象;

  Item i = cd;

  i.print();

  会输出什么?前一句的意思是让i和cd管理同一个对象,所以说后一句输出是让他们一起管着的对象进行print(),因此会输出在CD类内输出的内容;此处编译器没有报错,因为print()函数在Item和CD两个类里面都有。

  加入在CD类里面加入一个函数例如public void getValue();

  i.getValue();会报错,因为编译器不知道有getValue()这个函数

  cd.getValue();可以运行

4.上面代码中db.add(cd);意思是把子类的对象赋给父类的对象。这个动作叫做upcast向上造形。

5.

Vechicle v;
car c = new car;
v = c ;//这一步叫做upcast
c = v ;//错误 这步叫做cast但是编译器会报错

  第四句可以用强制类型转换修改

  c = (Car)v;

6.所有类的父类都是Object

例如在时钟模拟的代码里面

package Clock;

public class Clock {
    int uplimit;
    int tick;
    
    public Clock(int uplimit){
        this.uplimit = uplimit;
    }
    public void Tick(){
        tick++;
        if(tick == uplimit)
            tick = 0;
        }
    public int getvalue(){
        return tick;
    }
    public String toString(){//这里的toString函数是Object类里面的函数,如果改成其他函数名则在Display类里面无法让字符串进入函数运行
        if(tick<10) return "0"+tick;
        else return ""+tick;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Clock c=new Clock(24);        
    while(true)
    {
        c.Tick();
        System.out.println(c.getvalue());
    }
    }

}

以及引入了该类的Display代码

package Clock.a;

import Clock.Clock;

public class Display {
    public Clock hour=new Clock(24);
    public Clock minute=new Clock(60);
    
    public void tick(){
        while(true){
            minute.Tick();
            if(minute.getvalue()==0)
                hour.Tick();
            show();
        }
        }
    public void show(){
        System.out.println(hour+":"+minute);//这里由于hour进行+操作是发现右边是字符串,自动调用Clock类里面的toString()函数将其转换为字符串。否则是两个引用变量直接输出//reference type.
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Display c=new Display();
    c.tick();
    
    
    }

}

这里的toString就是Object父类里面的。

7.Polymorphism多态就是允许子类的对象赋值给父类。其实是把指针指向了相同的位置。

 

2016/5/17学习记录

标签:

原文地址:http://www.cnblogs.com/laigaoxiaode/p/5503477.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!