• 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多态就是允许子类的对象赋值给父类。其实是把指针指向了相同的位置。

  • 相关阅读:
    C# 线程手册 第三章 使用线程 .NET 对同步的支持
    C# 线程手册 第三章 使用线程
    C# 线程手册 第三章 使用线程 .NET 同步策略
    C# 线程手册 第三章 使用线程 AutoResetEvent, Mutex & Interlocked
    ALinq 使用教程(七)ALinq 的扩展
    ALinq 使用教程(三)数据的增、删、改
    免费好用的 NHibernate 可视化实体代码生成器 -- Visual Entity 1.1 支持 NHibernate 了
    ALinq 使用教程(五)使用 Xml 映射文件
    致力于打造最好用的 NHibernate 设计器--Visual Entity 1.4.4发布
    将 Linq to SQl 程序转为 Linq to Access
  • 原文地址:https://www.cnblogs.com/laigaoxiaode/p/5503477.html
Copyright © 2020-2023  润新知