java入门学习(6)—封装,继承,多态,this,super,初始代码块
1、【封装】:将对象的状态信息隐藏,不允许直接访问,而是通过该类提供的的方法阿里实现内部信息的访问和操作。
使用到的修饰符:private,不用修饰符(default),protected,public,
private:当前类访问权限,适合把属性隐藏在类的内部,只能通过方法访问。(一般用来隐藏)
default:包访问权限,只要自己所属的这包下的其他类都能访问。
protected:子类访问权限,可以相同包,或者不同包访问。一般用于子类重写。
public:公共属性,任何类都可以访问。(一般用来暴露)
注:由此可以解释为什么局部变量不用修饰符?因为其局部变量的作用域已经定了,就在方法,或者代码块内,所以不需要额外的修饰符限定其作用域。
封装方法:用setter _ _ getter方法进行隐藏的属性的访问。
用法事列:private String name;//定义一个隐藏的属性
public String getName()//语法为:【修饰符】数据类型 get[封装的属性名第一个字母大写]
{
return name; 【返回值和上面的数据类型一样】
}
public void setNmame(String name)【注意】:这是设置进去,不需要返回值
{
this.name=name;
}
2、【包】:引入包提供了类的多层命名空间,用于解决类的命名冲突,类文件管理等问题,【一般公司自己的包名多为公司域名的倒写】
包名:全部为小写字母;
语法:package 【包名】
【注】:1、一个源文件只能指定一个包,同一个包下的类可以自由访问。
2、当没有用import导入相应的包的时候,在父包中使用子包的类必须使用子包的全名,导入了包之后可以直接使用。
3、import java.util.*;这个表示导入util这个包下面的所有类,*号是通配符。
4、import static package.packagename.classname;这个是导入这个包的相应的类下面的静态属性。
5、自己定义包时,使用javac -d 源程序这个代码来编译时,-d的意思是系统会自动为package生成文件夹,并把生成的类放置在其下,当执行时会自动寻找,当然,子包作为子文件夹。
3、【继承】:子类通过继承得到父类的全部【属性】和【方法】,【但不能获得父类的构造器】。
语法:【修饰符】 class 【子类】extends 【父类】
{//代码块
}
【注】:1、一个类只能有一个直接父类,可有无数个间接父类。【单继承】
2、其实继承就是从一般到特殊的的情况,即:“is a”;如:apple is a fruit。
3、一切的类都是object类的子类。也即:如果定义的类没有用extends显式继承某个类的话,那么就会默认继承object类。
4、重写父类方法:a、方法名,形参列表都相同。
b、子类重写的方法的访问权限必须比父类的访问权限更大,或者相等。
c、子类重写方法的返回值类型必须比父类中方法的返回值类型更小,或者相等。
【注】:1、重写也叫覆盖,就是子类重写父类的方法后,会覆盖(屏蔽)了父类的方法,当其需要调用的时候用super(参数)【利用参数的不同,找不同的方法】,【但是如果父类方法有private修饰,则无法调用或者重写】。
2、子类的构造器总会默认的调用父类的构造器一次,相当于是要把父类的相关属性和方法加载到子类上。
3、加上@override:防止重写父类方法是出错,编译期给出严格的检查,如果不这样,那么只有运行的时候才能抛出异常。
【相近名字直接的区别】
a、重载:同一个类的不同方法之间,通过不同的参数定义相同参数名的不同方法的途径。
重写:发生在子类和父类之间的。
b、this:发生的调用发生在一个类里面。
super:发生在子类和父类之间,子类通过此关键字调用父类的初始化代码,属性,或者方法。
【注】:由于this和super都只能放在方法的第一行,所以不可能同时出现。
5、多态:java的变量在整个使用的过程中可能会有两个类型,编译时时对应的编译类型,而运行时便由实际赋予的值决定其变量。
编译时类型:由声明它的变量决定。
运行时类型:由实际指向(实际赋予)的类型决定。
6、关键字:【引用类型变量】instanceof 【类,或者接口】判断前面的对象是否是后面类的实例,如果是返回值为true,如果不是返回值为false。
【注】:1、其操作数的类型,要么与后面的类相同,要么与后面类有继承关系,否则会引起编译错误。
2、通常先用instance判断一个对象是否可以强制类型转换,然后再强制类型转换,从而保证程序的正确性。
7、初始化代码块:对一个类或者一个实例进行初始化。
语法:【修饰】 {初始化代码块} ;注:修饰符只能是static,或者可以省略。
特点:没有名字,所以不能被引用,只要创建对象时就会被隐式的执行。
有无static 的区别:有static是类初始化块,当类加载的时候对类进行初始化,隐式执行(自动执行)。没有static则会在对类创建实例的时候自动执行。
何时执行:static修饰的是类一加载就执行,而没有static的是当创建实例时(执行顺序由代码块和构造器的位置决定),若初始化代码块在构造器前面则先执行,再执行构造器里的代码块,反之则先执行构造器里的代码再执行初始化代码块。