A resposta não são tão importantes.
As explicações sim. [/quote]
está certo…
Qual i será passado para C?
as duas e o java reclamara que é ambígua, mesma coisa que acontece quando vc usa o join no sql, e passa uma coluna que existe nas duas tabelas… Existem regras no uso de variáveis de interface?
acho que de acordo com a sua necessidade e que sigam as regras descrita na questão abaixo… Por padrão, que características elas têm?
por padrão sempre serão são public final e static Devem ser públicas? estáticas? Algo assim?
na resposta da questão anterior
[quote=cake][quote=renzonuccitelli] A resposta a pergunta não faz sentido. Ou então a reposta é que interface não aceita variável de instância.
Experimenta o código:
public interface B {
public int i;
}
e vc verá que ele não compila.
[]s
[/quote]
Inicialize sua variável. Certamente compilará.
E novamente: A resposta não é tão importante. A explicação sim. [/quote]
Realmente compilou. Contudo o campo continua sendo estático. Então a variável não é de instância mesmo assim, a notação é apenas açúcar sintático para vc economizar digitação. Testei aki e realmente a variável foi considerada ambígua, como o amigo postou.
[quote=cake][quote=renzonuccitelli] A resposta a pergunta não faz sentido. Ou então a reposta é que interface não aceita variável de instância.
Experimenta o código:
public interface B {
public int i;
}
e vc verá que ele não compila.
[]s
[/quote]
Inicialize sua variável. Certamente compilará.
E novamente: A resposta não é tão importante. A explicação sim. [/quote]
É verdade, compilará. Porém o Java interpretará i como public static final int i;, ou seja, atributo de classe e ñ de instância. Quando vc cria um atributo em uma interface ele é naturalmente public static final. Faça diferente, tente declarar private int i = 0; e veja no q dá.
Bom… Então sabemos (acabei de aprender hehe) que interfaces tratam variáveis como public static final por default.
Sendo variáveis estáticas, não podem ser de instância, como alguns disseram.
Só fiquei meio surpreso com o fato do Java permitir variáveis na interface…
Isso me soa um tanto problemático, como questões de herança múltipla…
[quote=cake]Bom… Então sabemos (acabei de aprender hehe) que interfaces tratam variáveis como public static final por default.
Sendo variáveis estáticas, não podem ser de instância, como alguns disseram.
Só fiquei meio surpreso com o fato do Java permitir variáveis na interface…
Isso me soa um tanto problemático, como questões de herança múltipla…[/quote]
Acho que não vai ter problema com herança múltipla não. A única coisa é que vc não vai poder acessar a variável (que nem variável é, já que é final) pelo açúcar sintático, só através da Classe/Interface, evitando o problema de ambiguidade. Acho essas variáveis estáticas interessantes para vc colocar constantes na interface, inclusive enums, deixando as classes mais coesas.
Na verdade esse ñ é bem um case de syntatic sugar é apenas uma espécie de default da sintaxe do java.
Compare isso com os seguinte syntatic sugars da linguagem scala:
// Em scala se uma classe possui um método chamado apply()...
class ScalaClass1 {
def apply(i: Int) : Unit {
// faz alguma coisa com o int.
}
}
val c1 = new ScalaClass
// então vc pode chamar o método apply das seguintes maneiras:
c1.apply(0)
c1(0)
// Em scala se uma classe possui um método chamado update()...
class ScalaClass2 {
def update(a: Int, b: Int, c: String) : Unit {
// faz alguma coisa aqui...
}
}
val c2 = new ScalaClass2
// então vc pode chamar o método update das seguintes maneiras:
c2.update(0, 0, "a")
c2(0, 0) = "a"
[quote=dev.rafael]Na verdade esse ñ é bem um case de syntatic sugar é apenas uma espécie de default da sintaxe do java.
Compare isso com os seguinte syntatic sugars da linguagem scala:
[code]
// Em scala se uma classe possui um método chamado apply()…
class ScalaClass1 {
def apply(i: Int) : Unit {
// faz alguma coisa com o int.
}
}
val c1 = new ScalaClass
// então vc pode chamar o método apply das seguintes maneiras:
c1.apply(0)
c1(0)
// Em scala se uma classe possui um método chamado update()…
class ScalaClass2 {
def update(a: Int, b: Int, c: String) : Unit {
// faz alguma coisa aqui…
}
}
val c2 = new ScalaClass2
// então vc pode chamar o método update das seguintes maneiras:
c2.update(0, 0, “a”)
c2(0, 0) = “a”
[/code][/quote]
é vdd, realmente está mais pra default, apesar de ser meio esquisito.
Em lua vc pode usar : em vez de passar o próprio objeto como primeiro parâmetro de um método. Alias, é um livro que eu recomendo para todo programador. Lá, apesar de Lua não ter herança de forma nativa, ele ensina a fazer herança simples e múltipla de forma fácil. Abre muito a mente de quem programa em Java.
a) Toda valor declarado em uma interface é uma constante.
Ambas as declarações tem o mesmo resultado.
public interface X {
public static final int I = 10;
int I = 10;
}
b) Como dito acima são constantes.
c) A variável da classe pode ser pública, privada, protegida, estática, final, transient e volatile. A da interface SEMPRE será pública estática e final.
d) Geralmente as várias de classe são declaradas privadas e possuem os metodos get e set para alterar seu valor.
public class A {
private int i = 10;
// getters and setters
}
public interface B {
int i = 20;
}
public class C extends A implements B {
void print() {
System.out.println("A: " + this.getI()); // Ou this.i caso mude para protected ou public
System.out.println("B: " + C.i); // Ou B.i
}
}
Não li todas as respostas, então algo semelhante já pode ter sido postado.