Day 3 java
接口:
接口的方法一定是抽象的,没有内容
接口的作用:在于提供了一种契约机制,强制实现类必须提供接口中定义的所以方法。保证一致性和标准化
extend只能有一个,implement可以有很多个
类的设计原则:1.如果新的类无法对其他类通过is——a测试,那么就设计不继承的类
2.只有在需求某类的特殊化版本时,才覆盖或者增加新的方法来继承现有的类
3.当需要定义一群子类的模板,又不想让程序员初始化,设计出抽象的类来使用
4.如果想要定义出类可以扮演的角色,使用接口
super的使用:
新方法覆盖时加入老版本的方法;
要点:::
某个类不想被初始化,则以abstract这个关键词标记
抽象的类可以带有抽象和非抽象的方法
抽象的方法没有内容,则此类必定标识为抽象的
抽象的方法必须在具体的类中运行
java所以的类都是Object直接或者间接的子类
方法可以声明Object的参数或者返回类型
不管实际上所引用的对象是什么类型,只有在引用变量的类型就是带有某种方法的类型时才能调用该方法
Object引用变量在没有类型转换的情况下不能赋值给其他的类型
java不允许多重继承
接口就是纯抽象类
以interface代替class来声明接口
calss可以实现多个接口
实现某接口的类必须实现它所有的方法,因为这些方法都是public与abstract的
要从子类调用父类的方法可以用super这个关键词引用
构造器与垃圾收集器:::
堆和栈
堆heap中含有所有的对象
栈stack有方法调用和局部变量
非primitive的变量只是保存对象的引用
引用变量的值并不是对象本身
构造函数:带有在初始化对象是会执行的程序代码。也就是新建一个对象时就会被执行(会自动生成)
::: 没有返回类型,与类的名称相同
:::‘会在对象能够被赋值给引用之前就执行’
作用:初始化对象的状态
实例变量有默认值0,false,null
只要写了有参数的构造函数,编译器就不会再生成空白的构造函数
参数顺序不同就可以代表不同的构造函数
父类构造函数在对象的生命中所扮演的角色::在创建新对象时,所有继承下来的构造函数都会执行(先执行父类)
不能对抽象的类进行new操作
super()调用父类构造函数(会自动进行),super应该是构造函数的第一个语句
有参数的父类构造函数:使用实例
public abstract class Animal{
private String name;
public String getName(){ //setter方法,被hippo继承
return name;
}
public Animal(String theName){ //构造函数传值给name
name=theName;
}
}
public class Hippo extends Animal{
public Hippo(String name){ //构造函数,把名字传递给父类
super(name);
}
}
public class MakeHippo{
public static void main(String[] args){
Hippo h=new Hippo("Buffy"); //引用一个对象
System.out.println(h.getName()); //使用继承的父类方法,因此可以使用父类的private实例变量
}
}
从某个构造函数调用重载版的另一个构造函数:this::对对象本身的引用
只能用在构造函数,只能是第一行语句,super()和this()只能二选一
局部变量只会存活在声明该变量的方法中
实例变量的寿命与对象相同,如果对象还活着,则实例变量也会活着
当最后一个引用消失时,对象就会变成可回收的
三种方法释放对象的引用:
1.引用永久性的离开它的范围(例如被一个方法使用,方法用完了)
2.引用被赋值到其他的对象上
3.直接将引用设定为null
数字与静态::::
非静态方法与静态方法的差别:
static可以标记出不需要类实例的方法: public static int min(int a,int b)
区别:以类的名称调用静态的方法 以引用变量的名称调用非静态的方法
静态的方法不能调用非静态的变量 静态的方法也不能调用非静态的方法
静态变量(有默认值):它的值对于所有实例来说都相同
它会在该类的任何对象创建之前就完成初始化。
会在该类的任何静态方法执行之前就初始化。
静态的final变量是常数

浙公网安备 33010602011771号