Static了解
static加在局部变量的前面改变其存储类型使之成为静态局部变量,会延长它的生存周期,但是不会改变其作用域。
静态成员是属于类的,而不是属于某个对象的。即便没有任何一个实例,类的静态成员变量也已经存在了,因此静态成员除了能够和普通成员一样通过对象访问外,还可以通过类名访问。
static函数可以直接调用非静态函数,但是非静态函数不可直接调用静态函数。因为静态成员在类实例化对象之前就已经分配空间了,而非静态成员在类实例化对象之后才有内存空间。
复习:继承
继承的概念:如果有一些共有的属性和方法可以提取到父类中继承父类使用,减少了代码重复,方便了代码的修改,更加的清晰。
在java中继承的关键字是extends,在c#中继承的关键字是冒号‘:’。
子类可以继承父类的那些东西呢?
1.继承public和protectend修饰的属性和方法,因为public是共有的,protectend是包级别的,但是无论子类和父类是否在一个包里都可以继承父类的东西。
2.继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。
3.无法继承private修饰的属性和方法。
4.无法继承父类的构造方法。比方说属性和方法是财产,构造是思想,你可以继承父类的财产,但是父类的思想你继承不了。
子类可以重写父类的方法,为满足父类方法满足不了的需求。
例:
//父类 宠物类
public class pet{
//这里为了快捷一点就把变量定义成了public 没有做封装。
public String name;
public int age;
public int sum;
public void print(){
System.out.print("我的名字叫:"+name+“我的年龄”+age+“我与主人的亲密度:”+sum);
}
}
//子类 狗狗类
public class dog{
public String strain;//宠物的品种
public void print(){
super.print();//super语句必须写在方法的第一行。
//父类没有定义品种这个属性而子类有要用到 父类的方法没有打印品种,这个时候子类重写父类方法把要满足的需求填上。这就是重写。。。
system.out.print("我的品种是"+strain);
}
}
实现方法重写满足的要求
1.重写方法和被重写方法必须具有相同的方法名。
2.重写方法和被重写方法必须具有相同的参数列表。
3.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类。
4.重写方法不能小于被重写方法的访问权限。
抽象
抽象类和抽象方法都通过abstract关键字来修饰
抽象类不能实例化,抽象类中可以没有,有一个或多个抽象方法,甚至全部方法都可以是抽象方法。
抽象方法只有声明方法,没有实现方法。有抽象方法的类一定是抽象类,子类必须重写所有的抽象方法才能实例化,否则子类也是一个抽象类。
每天进步一点点..