一、继承
子类可以父类中继承一些成员变量,和方法。子类还可以添加自己独有的成员变量和方法。
子类:也叫派生类 父类:也叫超类,基类
关键字extends,用于继承语法
格式:
public class subClass extends SuperClass{
}
继承中的构造器:
子类不能继承父类的构造器,但是,子类中构造器可以调用父类的构造器
语法:super(有参传参);
作用:可以更好的给继承过来的成员变量赋值
ps:子类中的构造器一定会有一个调用了父类的构造器
父类中如果没有无参构造器,子类需要显示调用父类构造器。如果父类中有无参构造器,子类中的构造器可能隐式调用了父类的无参构造器.即:隐藏了super()
super()与this()的区别
相同点:都是调用构造器,而且必须方在首行首句。
不同点:super()是调用父类的构造器 this()是调用本类中其他构造器
二、继承的特点
(1)继承的传递性: 继承特征有传递特性,B类型继承了A类型的特征,C类型继承了B类型的特征。C类型也间接继承了A类型的特征。
(2)单继承:一个子类只能继承一个父类。但是一个父类可以有多个子类
三、方法的重写:
子类可以继承父类的方法,在继承时,我们可以在子类中编写与父类中的方法名相同,参数列表也相同的方法。这就是重写。
(1)父子类关系,方法名相同,参数列表相同
(2)返回值类型可以相同,也可以不同[子类方法的返回值类型必须是父类方法的返回值类型的子类]
父类型的变量可以引用子类型的对象
如:Animal a = new GoldFish();
Animal类型的变量a引用了子类型GoldFish的对象 符合人类的思维方式:这条金鱼是动物
编译期绑定:在编译过程中,变量只能调出本类型中的方法
在编译期间,方法静态绑定到变量上
运行期绑定: 在运行过程中,真正执行的方法的逻辑与对象的类型有关系。简单来说:方法在运行期间,动态绑定到对象上
成员变量的调用与变量的类型有关系(与编译期和运行期无关)
四、Object
Object是所以引用类型的顶级父类,系统都会默认使引用类型继承Object
此类中提供了常用的方法:
1、toString():
在Object中,返回的是类全名@HashCode值,即对象的内存堆中的位置信息
此方法会在输出变量是,或引用变量进行拼接时默认调用。而查看地址信息,通常没有必要,我们通常要查看的是对象的成员变量信息。因此我们都需要重写toString()方法,用于查看对象的详情
格式: "[成员变量1="+成员变量1+",成员变量2="+成员变量2+"]"
2、equals(Object obj)
Object类型中的此方法中的逻辑是比较调用者this与形参obj的地址信息是否相等。简单来说:比较this与obj是不是同一个对象
所以在定义类型时,继承过来的equals方法 我们要重写。
重写规则:
(1) 查看传进来的obj是不是Null
if(obj==null){ return false;
}
(2) 查看传进来的obj是不是this.
if(obj==this){
return true;
}
(3) 查看穿进来的obj是不是本类型
if(obj.getClass()!=this.getClass()){
return false;
}
可以改成
if(!(obj instanceof Person)){
return false;
}
instanceof关键字:
作用是判断引用变量指向的对象是否属于某一类型
语法:
boolean f = 变量名 instanceof 类型名
五、包
package: 包.
作用:用于管理源文件,区分类全名
命名规则:域名后缀.域名.项目名.模块名
声明位置:在源文件的首行首句。
import: 导包关键字:
在class之上,package之下。
用于声明 类的 类全名,在逻辑中就可以使用短的类名。
优点: 可以减少代码的书写。
六、访问修饰词
访问权限控制修饰词
private,protected,public,默认的(default)
修饰类时:
外部类:可以使用public和默认的
内部类:可以使用public,protected,默认的,private
修饰成员变量:四个都可以进行修饰
可见性不一样
本类中 同包下 不同包子类中 其他
public true true true true
protected true true true
default true true
private true
在实际开发中,成员变量要尽可能的设置成不可见,好处是,提高代码的安全性。即用private修饰为了在其他类中可以对成员变量进行重新设置值或者获取值, 我们可以定义相应成员变量的共有方法来进行操作。
public void setName(String name){
this.name = name;//修饰成员变量的值
}
public String getName(){
return name;//得到成员变量的值
}
七、修饰词final
修饰词final:最终的,最后的
(1)修饰类,
被final修饰的,不能再有子类了。
(2)修饰成员变量
可以直接初始化,也可以在构造器中初始化,不能再其他任何地方再次赋值
修饰局部变量
只能初始化一次。
(3)修饰方法
被final修饰的方法,不能再子类中重写
常量:
因为常量是一些特殊值,我们可以定义成final, public,static进行修饰。