黑马程序员 JAVA基础学习日记五——封装 继承 多态

时间:2021-07-17 00:43:37

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.    Java中的类和接口,都是隶属于某一个包的。

我们在使用类或接口时,就需要引入包或者包.

如果是我们自己创建了一个类,那么我们也应先创建一个包,把这个类放在包中,如果其他类需要引用这个类,就可以导入这个包或者导入这个包.

2.    继承:

权限修饰符  class  子类名  extends父类名

上面这是animal类的程序。

子类cat,继承于animal,然后创建实例test,这个实例对象就可以调用父类的属性和子类的属性,父类的方法和子类的方法。

当子类中定义了和父类相同的属性或方法时,在子类的类函数体中,通过super来调用父类的属性和方法,以防歧义。

如果是在子类的构造方法中调用父类的构造方法,此super关键字必须写在子类构造方法的第一行。

3.    将子类对象的实例赋值给父类对象,系统自动会完成子类对象到父类对象的类型转换。这称为向上转型。

4.    要想使父类向下转型,需要把父类赋值给向上转型后的子类。

publicstaticvoid main(String[] args)

     {

     cat ca=new cat();//定义子类

     animal ani2=ca;//catanimal转型,先向上转型在赋值给父类

     cat ca2=(cat)ani2;//再把这个父类赋值给子类,这才是正确的向下转型

     }

ca2的属性中可以看出,它能调用父类和子类的的属性和方法。

5.    使用final修饰的类不允许有子类

子类可以继承父类的final方法,但是不能重写父类的final方法,所以如果我们不希望子类重写某个方法时,就可以把该方法什么为final方法。

由于在父类中把run()定义为了final

所以在子类中重写就会出现错误。

到底是哪一个类型,我们可以通过instanceof来判断

对象名1  instanceof  A

返回的是布尔型,用于判断对象1是否为类A

6.    权限修饰符4种:默认的(即什么都不写)publicprotectedprivate

6.1           private:只能被本类内部通过类的实例来访问,不能在其他类当中被访问,不能被子类继承。

6.2           默认修饰符:也称为友好的成员变量或方法。只能在本类或同一个包中的其他类中通过类的实例进行访问,也可以被同一个包中的其他类继承,但是不能被不同包中的其他类继承和访问

6.3           Protected修饰符:可以再本类或同一个包中的其他类中通过类的实例访问,也可以被同一个包中的类或不同包中的类继承,但不能被不同包中的其他类访问

6.4           Public:可以别不同包中的类继承和访问。

Private     默认     protected       public

 

权限修饰符中的可见性说明:

 

Private

默认的

Protected

Public

本类

可见

可见

可见

可见

相同包中的其他类

 

可见

可见

可见

相同包中的子类

 

可见

可见

可见

不同包中的子类

 

 

可见

可见

不同包中的其他类

 

 

 

可见

7.    方法重载

所谓方法重载,就是在一个类或接口中,有多个相同名称的方法,他们的唯一区别是参数不同。

8.

 

Catdog什么都没有写,就是继承于animal

package aaa;

publicclass animal

{

     publicvoid cry(animal a)

     {

         if(ainstanceof cat)//是否为cat

         {

              System.out.println("猫咪咪叫");

         }

         if(ainstanceof dog)//是否为dog

         {

              System.out.println("狗汪汪叫");

         }

     }

     publicstaticvoid main(String args[])

     {

         animal ani=new animal();

         cat ca=new cat();

         ani.cry(ca);

         dog dg=new dog();

         ani.cry(dg);

     }}

运行结果:

8.    多态是一种特性,是用于描述其他东西的,它什么都不是。

9.    比如重载就有多态性,覆写也具有多态性。

10. 重载是很多方法名称相同,但参数不同,重载方法前面都有void。而覆写,是父类中定义了一个方法,在子类中定义了一个相同的方法。

11. 传值引用和传址引用

传值引用主要针对数据类型操作,只是传递数据,而传址引用主要是针对对象操作,它传递的是一个对象句柄的拷贝,也就形成了多个变量操作一个对象的局面,任何一个针对句柄操作的变量,都会影响到其他的变量。

传值引用的效果如上,改变a的值,不改变b的值。

上面是传址的效果,改变了stu1.x的值,也就同时改变了stu2.x的值。

12.封装:封装就是不让用户或非本程序编写者看到代码内幕。

 

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------