Java面向对象学习笔记 -- 3(继承、向上造型、重写)

1. 继承

1)extends关键字 ,使用继承可以实现代码的重用,在java语言中,需要通过extends关键字实现类的继承。继承完成后,子类(Sub class)可以继承父类(Super class)的成员变量及成员方法,同时子类也可以定义自己的成员变量和成员方法。届时,子类将具有父类的成员及本类的成员。 需要注意的是,Java语言不支持多重继承,即:一个类只能继承一个父类,但一个父类可以有多个子类。

2)使用继承的好处:

① 继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

② 继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

③ 继承提供了软件复用功能,减小代码和数据的冗余度,大大增加程序的重用性。

④ 继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性

3)继承中构造器的调用顺序

① 子类构造器里面一定会调用父类构造器,默认调用父类的无参构造器

② 子类父类都不写构造器,同样会存在调用关系。

③ 调用父类构造器只能写在子类构造器第一行,不写时候,也默认是第一行。

④ 当在子类构造器指定调用了父类的有参构造器,则不会再去执行默认的调用无参构造器

4)super的用法

① super():用来调用父类无参构造器,一定在子类构造器第一行使用,可以不写的。

② super.属性,访问父类对象的属性

③ super.方法,调用父类的方法

2. 向上造型

一个子类的对象可以向上造型为父类的类型。即,定义父类型的引用可以指向子类的对象,但是通过父类的引用只能访问父类所定义的成员,而不能访问子类所扩展的部分。

父类型   变量   =   new  子类();

向上造型是多态的一种体现,同时可以使程序更简单明了。

属性绑定到变量的类型,由变量类型决定访问哪个属性;

方法动态绑定到对象,由对象的类型决定访问哪个方法。

强转:

父类型   变量1   =   new  子类();

子类型 变量2 = (子类型) 变量1;

强转对方法动态绑定到对象无影响,因为强转的是父类的引用,而实例是没变的,只是把实例当作另一个状态去看而已。但是强转对属性动态绑定到变量类型有影响。



/**

* 在俄罗斯方块游戏中,每次下落的方块是随机生成的,但是不能保证下次生成什么类型的方块,

* 所以,在获取方块时候,需要使用父类型作为方法的返回值类型。

*/

public static Tetromino getOntTetronino(){

int num = (int)(Math.random() * 7);

switch( num ){

case 0 :  return new T();  break;

case 1 :  return new O(); break;

case 2 :  return new L(); break;

... ...

}

}

// 然后接收

public static void main(String[] args){

Tetromino tetro = getOntTetronino();

}



3. 方法的重写

重写(override):发生在两个类中,并且是子父类的关系,子类方法与父类方法签名相同,方法体不同。

注意:

1)重写方法被调用时,看对象

2)两同两小一大原则

2.1)两同:方法名同,参数列表同

2.2)两小:子类返回值类型小于等于父类的

2.2.1)返回值使用void和基本类型,必须相同

2.2.2)返回值是引用类型时,可以子类小于等于父类

2.3)一大:子类访问权限大于等于父类

重写的好处:

重写是对父类的功能的扩展,可用拥有父类的功能,还可以实现自己的功能,在实际开发过程中使用方便,同时也是代码结构清晰。

重写和重载的区别:

1)重写是发生在2个各类里面,且是字符类关系的2个类,重载是发生在一个类里的

2)冲写遵循的原则是运行期绑定,重载则是编译期绑定

3)重写必须方法名相同,参数列表相同;重载是方法名相同,参数列表必须不同。

时间: 2024-08-07 23:22:19

Java面向对象学习笔记 -- 3(继承、向上造型、重写)的相关文章

java面向对象学习笔记(1)

此笔记用于记录java面向对象部分学习的心得体会. 一.对象的this指针引用 java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现的位置不同,this作为对象的默认引用有两种情况: 1.构造器中引用该构造器正在初始化的对象. 2.在方法中引用调用该方法的对象. this关键字的最大作用就是让类中的一个方法去访问另一个方法或File.下面通过一段代码来进行说明. package test; public class Dog { public void Jum

Java面向对象学习笔记 -- 5(抽象类、接口)

1. 抽象类 抽象就是将拥有共同方法和属性的对象提取出来,提取后,重新设计一个更加通用.更加大众化的类,就叫抽象类. 1)抽象方法:由abstract修饰,只有方法的定义,没有方法的实现: 2)包含抽象方法的类必须是抽象类: 3)抽象类:由abstract修饰,不能被实例化,可以包含抽象方法和非抽象方法: 4)抽象类都是需要被继承的,子类继承后再实现以下操作: 4.1)子类中重写父类的抽象方法 4.2)子类也声明为抽象类 5)抽象类的意义: 5.1)封装子类共有的变量和方法--代码的重用 5.2

Java面向对象学习笔记 -- 1(类、对象、构造器)

1. 类 1)是同类型东西的概念,是对现实生活中事物的描述,映射到Java中描述就是class定义的类. 2)其实定义类,就是在描述事物,就是在定义属性(变量)和方法(函数). 3)类中可以声明:属性,方法,构造器: 属性就是实例变量,用于声明对象的结构的,在创建对象时候分配内存,每个对象有一份! 实例变量(对象属性)在堆中分配,并作用于整个类中,实例变量有默认值,不初始化也能参与运算. 4)类与类之间的关系: ① 关联:一个类作为另一个类的成员变量 public class A { pulic

java面向对象学习笔记(2)

一.构造器 1.构造器最大的用处就是在创建对象时执行初始化,每个java类必须包含一个或一个以上的构造器.一般系统会提供一个无参的构造器,但是如果我们自己定义了一个构造器后它就不会再起作用了.如果我们为一个类编写了有参构造器,那么最好还是为该类提供一个无参的构造器. 2.构造器的重载 同一个类中可以包含有多个构造器,多个构造器的形参列表不同,即被称为构造器的重载.系统通过new调用构造器时,系统将根据传入的实参列表来决定调用哪个构造器.示例代码如下: <span style="font-s

Java面向对象学习笔记 -- 7(GC)

1. 垃圾回收机制(GC) 1)Java内存分配    在JAVA程序中,无论代码还是数据,都需要存储在内存中,而java程序所需内存均由JVM进行管理分配,JVM会将申请的内存从逻辑上划分为三个区域:堆.栈.方法区.这三个区域分别用于存储不同的数据. 堆用来存放创建出来的对象,jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令): 栈中只保存基本数据类型和对堆空间的对象的引用变

Java面向对象学习笔记 -- 2(访问控制修饰符)

1. 访问控制修饰符(封装) 封装:将数据封装到类的内部,将算法封装到方法中. 1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取. 2)封装结果:存在但是不可见. 3)public:任何位置可见,可以修饰:类.成员属性.成员方法.内部类.跨包访问类(需要使用import语句导入),成员属性 = = 成员变量. 4)protected:当前包中可见,子类中可见.可以修饰:成员属性.成员方法.内部类(只能在类体中使用,

Java面向对象学习笔记 -- 6(内部类、Timer)

1. 内部类 内部类就是在一个类的内部定义的类,有:静态内部类.成员内部类,局部内部类.匿名内部类. -1) 静态内部类:使用static修饰,声明在类体中, 静态内部类中可以访问外部类的静态成员,开发很少用 -2) 成员内部类:声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例,内部类实例可以访问共享外部类的成员变量 -3) 局部内部类:把类声明在方法中,就是局部内部类,作用域类似局部变量,出了方法就不能使用该类. -4) 匿名内部类:非常常见,可以写

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. 2.下面我们是自定义一个SmartImageView继承自ImageView,扩展了ImageView的功能:     步骤: • 新建一个SmartImageView类,让继承自ImageView(放置特定的包下): • 实现SmartImageView类下的构造方法,最好全部实现,这个不容易出