Java面向对象编程(中)

    科技2022-07-11  99

    Java面向对象编程(中)

    面向对象三大特性之继承性方法的重写关键字-super关键字-instanceof面向对象三大特征之多态性equals方法toString方法包装类

    面向对象三大特性之继承性

    在继承性的特性下,子类拥有父类的属性和方法,而在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没有该方法

    Processed: 0.011, SQL: 8