Java面向对象编程(中)

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

在继承性的特性下,子类拥有父类的属性和方法,而在Java中不同于C++的继承,Java不允许一个类同时继承多个类,但允许一个类同时被多个类继承

  • 继承性的作用:
  1. 防止代码的冗余
  2. 提供代码的拓展性

注意: 千万不要因为用继承性而用继承性,在用继承性前提是,子类是父类的一种,比如狗的父类可以是动物,但不可以是植物

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

方法的重写

当父类提供的方法不满足子类的需求时,我们可以采取方法重写的方式覆盖父类的方法

方法重写注意:

  1. 子类的方法名必须与父类的方法名一致
  2. 父类的被重写的方法不能用private修饰
  3. 子类方法的权限必须大于父类
  4. 子类方法的形参列表必须与父类方法一致
  5. 子类方法抛出的异常不能大于父类抛出的异常
  6. 子类和父类的方法要么同时加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多态性是父类引用指向子类对象,比如,假设PersonMan的父类时

Person p = new Man();

而这就运用了多态,那么多态到底有什么用?提高了代码的灵活性
运用多态性就可以用Person对象来调用Person对象子类的通用方法

注:属性无法使用多态性

但如果想使用子类特有的方法,那么就需要向下转型。
运用多态性是父类对象的本质还是子类对象,因此运用instanceof关键字判断父类对象是否是子类对象时会返回true

equals方法

之前说过所有的类都继承Object类,equals方法属于Object中的一个方法

==与equals方法的区别

  1. 基本数据类型,只能用==判断值是否相等
  2. 引用数据类型,==判断地址值是否相同,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没有该方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值