3.7日java学习总结
接口有无比的适用性,使用接口就可以继承超过一个以上的来源。类可以继承过某个父类。并且实现其它的接口。同时可以多个类实现同一个接口,这样就可以满足不同的需求组合继承。我们知道抽象类可以规范子类的继承,那接口可以说是更加规范的对子类进行约束,接口不提供任何实现,接口中的所有方法都必须是抽象方法,可以说接口就是规定了一组规则。
定义方式
interface 接口名称 [extends 父接口1,父接口2]{
常量定义;
方法定义;
}
以下是接口的一些要点:
(1)访问修饰符只能是public或默认
(2)接口可以多继承
(3)接口中的属性只能是常量,总是public,static,final修饰
(4)接口中的方法只能是抽象方法
(5)子类通过implements来实现接口中的规范
(6)接口不能创建实例,但可以用来声明变量
(7)一个类实现了接口那就要实现接口中的所有方法,这些方法只能是public
public class TestInterface {
public static void main(String[] args) {
Angel an=new Angel();
an.fly();
an.help();
System.out.println(an.maxma);
Goodman man=new Goodman();
man.help();
}
}
interface Volant{
void fly();
int maxma=100;
}
interface Honest{
void help();
}
class Angel implements Volant,Honest{
public void fly() {
System.out.println("飞");
}
public void help() {
System.out.println("help you");
}
}
class Goodman implements Honest{
public void help() {
System.out.println("help other");
}
}
接口的多继承
interface A{
void testa();
}
interfaceB{
void testb();
}
interfaceC extends A,B{
void testc();
}
public class implements C{
public void testc(){
}
public void testb(){
}
public void testa(){
}
}
第九章
要点:
(1)实例变量是声明在类中方法之外的地方
(2)局部变量声明在方法中或者方法的参数上
(3)所有的局部变量都存在于栈上相对应的堆栈块中
(4)不管是局部变量还是实例变量,对象本身都会在堆上
(5)当你调用一个方法时该方法会放在调用栈的栈顶
(6)实例变量保存在所属的对象中位于堆上
(7)如果实例变量是个对对象的引用,那么引用和对象都在堆上
下面是构造方法的重载代码
public class User {
int id;
String name;
String pwd;
public User() {
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public static void main(String[] args) {
User u1 = new User();
User u2 = new User(1,"hh");
User u3 = new User(100, "hh", "123456");
}
}
构造方法的调用顺序,先向上追溯到object,然后再向下执行类的初始化块和构造方法,直到当前子类为止,这个我们可以理解为父母与孩子的关系,要先有父母才会有孩子,子类对象可能要继承父类的方法,所以要先将父类构造出来,才能继承。
局部变量存活在引用该变量的方法中,只要这个方法没有执行完,他就一直保存在那里,不会改变,而实例变量的周期和对象一样,只要对象还存在,那么实例变量也会存在
当对对象的最后一个引用消失的时候,那么这个对象就会被回收,这就是垃圾回收机制