2016/5/17学习记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016/5/17学习记录相关的知识,希望对你有一定的参考价值。
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学习记录的主要内容,如果未能解决你的问题,请参考以下文章