Meu scanner não esta pegando atributos de outra classe

O que eu fiz de errado??

Resumindo, tenho trës classes, NotaFiscal, Produto e ItemNota .

NotaFiscal tem os atributos : CodigoNf, Uf, Data.
Produto tem: codigo, descricao e preco
ItemNota tem a quant

Existem outras 03 classes que são ICMS por estado

Num scanner queria inserir CodNf, qual o estado : se for 1 é RS se for 2 é SC.Para RS são 17% e SC 12%, tambem mencionar codigo produto, descricao e preco, e a quantidade do produto inserido

Pois bem depois precisaria pegar estes valores e printar na tela assim

num NF:… 234987
data :… 12/05/2013
UF …RS = 1
produto …Pacote de Feijão
preço…1.50
quant…10
valorParcial = preco x quant
valorImposto = valorparcial x 17% , onde foi dito que o estado é RS e sobre o valor parcial da nota calculo 17 %

Travei na hora de inserir no scanner com list e mostrar pegando esses atributos das classes no scanner.

CLASSE NOTA FISCAL

package edu.qi.com.br;

import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public abstract class NotaFiscal {

	private static int codigo;
	private static Object adicionarItem;
	private Date data;
	private String uf;

	public static void main(String[] args) {

		// tentei instanciar Produto e não sei se esta certo ..mas nao deu, nao entendi como
		Scanner s = new Scanner(System.in);

		System.out.println("Digite código do produto: ");
		codigo = s.nextInt();

		System.out.println("Digite a descrição do produto: ");
		descricao = s.next();
		System.out.println("Digite o preço do produto: ");
		preco = s.nextFloat();
		System.out.println("Digite o quantidade de produtos: ");
		quant = s.nextInt();

		// codigo, descricao, preco
		Produto prod = new Produto(codigo, descricao, preco);

		// Produto, qtd
		adicionarItem(prod, quant);

		 for (ItemNota it : items) { 
	            System.out.println("Produto: " + it.getDescricao()); 
	            System.out.println("Preco: " + prod.getPreco());
	            System.out.println("Quantidade: " + it.getQuant()); 
	            System.out.println("Valor parcial: " +prod.getPreco()*it.getQuant()); 
	         } 


	}

	

	private static List<ItemNota> items;

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public List<ItemNota> getItems() {
		return items;
	}

	
	 public static void adicionarItem(Produto prod, int qtd) { 
		 ItemNota it =	  new ItemNota();
	  
	  it.setProduto(prod); 
	  it.setQuant(qtd); // double valorParcial=
	  //it.setProduto(prod)*it.setQuant(qtd); //adiciona item na lista de itens
	  items.add(it);
	  
	  }
	 

	public void calcularTotal() {
		// return
	}

	public void calcularTotalSemipostos() {
		// return
	}

	public NotaFiscal(Date data, String uf) {
		super();
		this.data = data;
		this.uf = uf;
		this.items = new ArrayList<ItemNota>();
	}

}

CLASSE ITEM NOTA


public class ItemNota { 
	private Produto produto ;
	private int quant;
	public Produto getProduto() {
		return produto;
	}
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	public int getQuant() {
		return quant;
	}

	public void setQuant(int quant) {
		this.quant = quant;
	}

	public float getValorParcial () {
		return quant * produto.getPreco();
	}
	public String getDescricao() {
		// TODO Auto-generated method stub
		return null;
	}

}

CLASSE PRODUTO



public class Produto {
	int codigo;
	String descricao;
	float preco;

	public Produto(int codigo, String descricao, float preco) {
		super();
		this.codigo = codigo;
		this.descricao = descricao;
		this.preco = preco;
	}

	public Produto(String preco2, String codigo2) {
		// TODO Auto-generated constructor stub
	}

	

	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public float getPreco() {
		return preco;
	}

	public void setPreco(float preco) {
		this.preco = preco;
	}

	@Override
	public String toString() {
		return "Produto [codigo=" + codigo + ", descricao=" + descricao
				+ ", preco=" + preco + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codigo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Produto other = (Produto) obj;
		if (codigo != other.codigo)
			return false;
		return true;
	}

	public String getQuantidade() {
		// TODO Auto-generated method stub
		return null;
	}

	public String getValorParcial() {
		// TODO Auto-generated method stub
		return null;
	}

}

ICMS DO UF RS

public class CalculoICMSRS {
	
	int icms = 17;

	public int getIcms() {
		return icms;
	}

	public void setIcms(int icms) {
		this.icms = icms;
	}
	
	

}

ICMS DO UF SC

public class CalculoICMSSC {
	
	int icms = 12;

	public int getIcms() {
		return icms;
	}

	public void setIcms(int icms) {
		this.icms = icms;
	}
	
	

}

Use apenas o método nextLine() para ler do teclado.