面向对象三大特性之继承性
在继承性的特性下,子类拥有父类的属性和方法,而在Java中不同于C++的继承,Java不允许一个类同时继承多个类,但允许一个类同时被多个类继承
- 继承性的作用:
- 防止代码的冗余
- 提供代码的拓展性
注意: 千万不要因为用继承性而用继承性,在用继承性前提是,子类是父类的一种,比如狗的父类可以是动物,但不可以是植物
Object是所有类的父类
关键字:extends
代码示例:
//这里为了方便演示,先不考虑封装性
class Animal{
int age;
int leg;
public Animal(){}
public Animal(int age,int leg){
this.age = age;
this.leg = leg;
}
public void show(){
System.out.println(age + " " + leg);
}
}
class Dog extends Animal{
String name;
public Dog(){}
public Dog(String name,int age,int leg){
this.name = name;
//先不用super
this.age = age;
this.leg = leg;
}
public void Info(){
System.out.println(name + " " + age + " " + leg);
}
}
public class Test{
public static void main(String[] args){
Dog dog = new Dog("二哈",2,4);
dog.show();
dog.Info();
}
}
运行结果:
2 4
二哈 2 4
方法的重写
当父类提供的方法不满足子类的需求时,我们可以采取方法重写的方式覆盖父类的方法
方法重写注意:
- 子类的方法名必须与父类的方法名一致
- 父类的被重写的方法不能用private修饰
- 子类方法的权限必须大于父类
- 子类方法的形参列表必须与父类方法一致
- 子类方法抛出的异常不能大于父类抛出的异常
- 子类和父类的方法要么同时加static(不是方法重写),要么同时不加(方法重写)
代码演示:
class A {
public void show(){
System.out.println("我是A");
}
}
class B extends A{
public void show(){
System.out.println("我是B");
}
}
public class Test{
public static void main(String[] args){
B b = new B();
b.show();
}
}
运行结果:我是B
关键字-super
super和this差不多,this表示的是当前对象,而super表示的是父类
注意:this现在本来查找,找不到再到父类找,而super直接去父类找
其用法与this一致
代码演示:
class A {
public void show(){
System.out.println("我是A");
}
}
class B extends A{
public void show(){
super.show();
System.out.println("我是B");
}
}
public class Test{
public static void main(String[] args){
B b = new B();
b.show();
}
}
运行结果:
我是A
我是B
关键字-instanceof
这个关键字用来判断对象A是否是对象B或对象B的子类,返回布尔值
A instanceof B
面向对象三大特征之多态性
多态性可以说是三大特性中最为抽象的概念,但这个特性很重要,那什么是多态性呢?
多态性指的是一种对象的多种形态
在生活中,我们都扮演着不同的角色,比如儿子,父亲,员工。。。,但这几个都是你,这就是多态性的体现
回归JAVA多态性是父类引用指向子类对象,比如,假设Person
是Man
的父类时
Person p = new Man();
而这就运用了多态,那么多态到底有什么用?提高了代码的灵活性
运用多态性就可以用Person对象来调用Person对象子类的通用方法
注:属性无法使用多态性
但如果想使用子类特有的方法,那么就需要向下转型。
运用多态性是父类对象的本质还是子类对象,因此运用instanceof关键字判断父类对象是否是子类对象时会返回true
equals方法
之前说过所有的类都继承Object类,equals方法属于Object中的一个方法
==与equals方法的区别
- 基本数据类型,只能用
==
判断值是否相等 - 引用数据类型,
==
判断地址值是否相同,equals
同样也是判断地址值是否相同,但==
必须数据类型要兼容否则会报错
但是Java中很多引用数据类型的equals方法都是比较内容,原因是因为他们重写了Object内的equals方法,因此在我们自己定义的类中如果也想让equals方法比较的是属性的内容,那么我们也可以重写equals方法
toString方法
toString同样也是Object中的方法,默认返回对象的地址值,同样很多引用数据类型重写了toString方法,因此例如String的toString方法返回的就是字符串的内容,当然我们在自己定义的类中同样可以重写toSring方法。
包装类
Java的数据类型分为基本数据和引用数据类型,基本数据类型没有对象的性质,为了方便操作,为每个基本数据类型设计了一个包装类,这样就可以利用包装类去像对象一样操作
- 基本数据类型 -> 包装类
例如:int -> Integer
代码片段
int num = 10;
Integer integer = new Integer(num);
- 包装类 -> 基本数据类型
例如:Integer -> int
代码片段
int num = new Integer(10).intValue();
- 自动装箱 (自动将基本数据类型转为包装类)
例如:int -> Integer
代码片段:
Integer integer = 10;
- 自动拆箱(自动将包装类转为基本数据类型)
例如:Integer -> int
代码片段:
int num = new Integer(10);
- 包装类转字符串
例如:Integer -> String
代码片段:
String str = new Integer(10).toString();
- 基本数据类型转字符串
例如:int -> Stirng
代码片段:
int num = 10;
//方式一
String str1 = num + "";
//方式二
String str2 = String.valueOf(num);
- 字符串转包装类
例如:String -> Integer
代码片段:
Integer integer = new Integer("100");
注意:字符串转换时内容必须与该包装类对应的基本数据类型相对应,并且Charater没有字符串构造器
- 字符串转基本数据类型
例如:String -> int
代码片段:
int num = Integer.parseInt("100");
注意:字符串转换时内容必须与基本数据类型相对应,并且Character没有该方法