java 学习3。类 和 继承

java 成员变量的初始化顺序是,1.定义时候给的值-》2.构造函数中赋值。   没有看编译后的编码,估计定义类似c++的参数初始化列表,给内存的时候就赋值, 而构造函数中其实是给默认值重新赋值。

如果定义的时候没有赋值,那么就会给默认值,也就是0,null。等。
如果是final 变量, 按道理 必须定义的时候给,因为那个时候是第一词赋值,但是由于提供给用户灵活性,导致可以在构造函数赋值,构造函数的时候,当成第一次赋值,但是又造成初始化顺序理解的不统一,其实划不来。
如果细心点,会发现java 定义时给的值就像是c++的构造函数的参数初始化列表。:MyClass:CMyClass(int x, int y) : y(y), x(x) .


//学习了类和继承,以及 派生类的构造以及 方法覆盖。

public
static void Study_class() { //goods基类是否应该是一个虚类.其实并不是固定的.看场景,如果把goods基类看作现实物品的基类,那么就应该是虚类.因为不存在一个概念的物品. //但如果把goods 看作是某物品的基本信息类,那么可以是普通类.代表一个物品的基础信息. //下面就是作为基类创建. List<goods> mygoods=new ArrayList<goods>(); goods book_cshart=new goods(0, "c#", 3.1f, enum_goods_type.book); goods book_javaGoods=new goods(1, "java", 4.5f, enum_goods_type.book); goods fruit_apple=new goods(3,"apple",1f,enum_goods_type.fruit); goods fruit_banana=new goods(4,"banana",0.9f,enum_goods_type.fruit); mygoods.add(book_cshart); mygoods.add(book_javaGoods); mygoods.add(fruit_apple); mygoods.add(fruit_banana); for(int i=0;i<mygoods.size();i++) { System.out.println("base:"+mygoods.get(i).MyBaseInfo()); System.out.println("special"+mygoods.get(i).MySpecialInfo()); } //派生类创建 book_cshart=new Book(0, "c#2", 3.1f, "linson", new Date()); book_javaGoods=new Book(10, "java2", 4.5f, "linson", new Date()); fruit_apple=new Fruit(3, "apple2", 1f, "red"); fruit_banana=new Fruit(4,"banana2",0.9f,"yellow"); List<goods> mygoods2=new ArrayList<goods>(); mygoods2.add(book_cshart); mygoods2.add(book_javaGoods); mygoods2.add(fruit_apple); mygoods2.add(fruit_banana); for(int i=0;i<mygoods.size();i++) { System.out.println("base:"+mygoods2.get(i).MyBaseInfo()); System.out.println("special"+mygoods2.get(i).MySpecialInfo()); } }

基类:

package com.linson;

import java.text.DecimalFormat;

enum enum_goods_type
{
    book,
    fruit;
}


public class goods 
{
    public int id;
    public String name;
    public float price;
    public enum_goods_type gtype;
    
    public goods(int _id,String _name,float _price,enum_goods_type _type)
    {
        id=_id;
        name=_name;
        price=_price;
        gtype=_type;
    }
    
    public String MyBaseInfo()
    {
        DecimalFormat dt=new DecimalFormat();
        dt.applyLocalizedPattern("0.00");
        String priceformat=dt.format(price);
        return "ID:"+id+". Name:"+name+". price:"+priceformat+". type:"+gtype.name();
    }
    
    public String MySpecialInfo()
    {
        return "";
    }
}

book 

package com.linson;

import java.util.Date;

public class Book extends goods
{
    public String writer;
    public Date publicDate;
    
    public Book(int _id,String _name,float _price,String _writer,Date _publicdate)
    {
        super(_id, _name, _price, enum_goods_type.book);
        writer=_writer;
        publicDate=_publicdate;
    }
    
    @Override
    public String MySpecialInfo()
    {
        String retString=MyBaseInfo();
        
        retString=retString+" .Writer:"+writer+".";
        return retString;
    }
}

fruit:

package com.linson;

public class Fruit extends goods
{
    public String Color;
    
    public Fruit(int _id,String _name,float _price,String _color)
    {
        super(_id, _name, _price,com.linson.enum_goods_type.fruit);
        Color=_color;
    }
    
    @Override
    public String MySpecialInfo()
    {
        String retString=MyBaseInfo();
        
        retString=retString+" .Color:"+Color+".";
        return retString;
    }
}
原文地址:https://www.cnblogs.com/lsfv/p/9554017.html