Java基础学习--面向对象特性(继承、封装、多态)

继承的实现:

使用extends关键字,子类是父类的扩展。instanceof 类型判断。

注意:

1、父类也成为超类,派生类,基类。

2、Java中只有单继承,没有C++中的多继承,多继承会引起混乱,使得继承链过于复杂,系统难于维护。

3、Java中类没有多继承,接口有多继承

4、子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不一定可以直接访问(例如父类的属性和方法)。

5、如果定义一个类的时候没有使用extends,那么该类的父类为:java.lang.Object

public class TestExtends{
    public static void main(String[] args){
        Student stu = new Student("", 172, "");
    }
}
class Person{
    String name;
    int height;
    
    public void rest(){
        System.out.println("休息");
    }
}
class Student extends Person{//继承实现代码重用
    String major;
    public Student(String name, int height, String major){
        this.name = name;
        this.height = height;
        this.major = major;
    }
    public void study(){
        System.out.println("学习满两小时");
    }
}

方法的重写(override):

 方法的重写要符合三个要点:

1.方法名、形参列表相同

2.返回值类型和声明异常类型,子类小于等于父类。

3.访问权限,子类大于等于父类。

“==”和equals方法:

“==”代表双方是否相同,如果是基本类型则表示值相等,如果是引用类型则表示地址相等,即是同一个对象。

Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。

equals方法默认就是比较两个对象的hashcode,是同一个对象的引用时返回true,负责返回false,但是,可以根据自己的要求重写equals方法。

super关键字:

super是直接父类对象的引用,可以用过super来访问父类中被子类覆盖的方法或属性。

使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。

若是构造方法的第一行代码没有显示调用super(...)或者this(...),Java会默认调用super(),调用父类的无参数构造方法,此时super()可以省略。

继承树追溯:

属性/方法的查找顺序:

1.查找当前类中没有属性h

2.依次上溯每个父类,查看每个父类中是否有h,直到Object.

3.如果没找到,则出现编译错误

4.如果找到h变量,则终止该过程

构造方法的调用顺序:

构造方法的第一句总是super(...)来调用父类对应的构造方法,所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化和构造方法,直到当前子类为止。

编程中封装的好处:(通过访问控制符来实现)

提高代码安全性、提高代码的复用性、高内聚低耦合

修饰符同一个类同一个包子类所有类
private*   
default**  
protected*** 
public****

类的属性处理:

1.一般使用private访问权限

2.提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值和读取操作。布尔变量的get方法是is开头。

3.一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

多态(Polymorphism)

指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。

要点:

1. 多态是方法的多态,不是属性的多态(多态与属性无关)

2. 多态的存在有三个必要条件:继承、方法重写、父类引用指向子类对象。

public class testPoly {
	public static void main(String[] args) {
		Dog d = new Dog();
		animalCry(d);
		Cat c = new Cat();
		animalCry(c);
		Animal a = new Animal();
		animalCry(a);
	}
	static void animalCry(Animal a){
		a.shout();
	}
}
class Animal{
	public void shout(){
		System.out.println("叫一声!");
	}
}
class Dog extends Animal{
	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("汪汪汪");
	}
}
class Cat extends Animal{
	@Override
	public void shout() {
		System.out.println("喵喵喵");
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值