Edgar的java 学习日志--多态篇

java学习日志2

时间:2020.5.6

先说OOP三大特征的自我理解

* 封装

(属性私有 提供公共方法对外访问)
封装的解释这里我想引一个小故事,我觉得对新手更加友好。
最初是smart是最早的oop语言,发明他的哥们在观察同事处理数据的时候,总是将数据和处理数据的方法一同发给客户。当我们聊封装的时候,第一反应就是安全。的确,我们通过私有化,再通过向外提供公共接口,我们尽最大可能保证了数据的安全,修改数据的正规化。
我觉得通过上面的故事,我们应该想到封装的另一种好处就是,它开始表达内聚的思想。我们将数据和处理数据方法放在一个类中,以后我们不管是继承他还是通过实例再调用其中方法,我们都会很方便,因为自身就存在数据的容器,还存在方法(内聚,自类完成一件事的能力。代码上,我们常常追求高内聚)。

* 继承

(存在继承和实现这样两种形式)

* 多态

(事务存在的多种形式)
多态三个必要条件:

  1. 1.父类引用指向子类对象
    2.要有覆盖操作,也就是重写 。如果没有的覆盖话,当我们使用多态的时候,新生成的对象中将不存在继承自父类的方法) 此代码中,如果我们子类不重写父类中的bit方法,那么我们方法将不会调用–这与子类直接继承父类所有公共方法不同。
    (此处理解java多态,是带有强制性的让子类升级方法、或者说改善子类方法)
    3.需要存在继承或者实现关系(extends 和 implement )
    (这话基本是废话)
    4.多态性的思考 (父类调用的时候只能调用父类里的方法,不能调用子类的特有方法,因为你并不清楚将来会有什么样的子类继承你) 这句话是说在编译的时候,没有办法确定到底是哪一个继承的父类会出现在等号的右边,就是具体的子类对象我们还确定不了。而且还是上面的覆盖的准则,调用子类里面继承父类并且重写的方法
    5.总结 属性看左 方法看右 编译看左 运行看右

上代码

public class Demo1 {
     
public static void main(String[] args) {
     
	Animal catAnimal=new  cat()	;//父类引用指向子类对象 左边是父类 右边是子类的引用
	//属性的话 调用的是父类的属性
	System.out.println(catAnimal.age);
	//方法的话调用的是子类cat继承并且重写的bit方法,是子类中的方法。
	catAnimal.bit();
	
}
}
//这么写类,对应一道牛客题,一个源文件里面只能有一个public class 剩下的不许加public 
//因为会从public class开始编译
class Animal{
     
	int age=99;
	public void bit() {
     
		System.out.println("父类的公共方法");
	}
	private void test() {
     
		System.out.println("父类的私有方法");
	}
}
class cat extends Animal {
     
	 int age=10;
	 public void bit() {
     
		System.out.println("子类的公共方法");
	}
		
}

5.21更新一些小想法

我们先看一下 arraylist
这里它带有get方法 很方便的我们读取,迭代遍历。

ArrayList   arrayList=new ArrayList();
		arrayList.get(0);

这一块是我们常用collection接口,我们常用arraylist,也就是相当于它的子类来实现它,但是我们需要用迭代器去实现遍历。
所以当时我产生了疑问。当时我问老师这块不是多态吗?怎么不能调用子类arraylist里面的get实现迭代呢
多态条件
1.父类引用指向子类对象
2.子类重写父类里面的方法
3.新建的对象里面使用了子类重写父类的方法
所以,
第一:让我想明白了这不是多态。
第二:我们常说多态,属性看父类,方法看子类。其实本质就是一句话,都看父类,只是因为子类重写了父类里面的方法所以才看子类里面的方法。

Collection collection=new ArrayList();
Iterator   iterator=collection.iterator();

你可能感兴趣的:(Java基础,java,多态)