java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定

1.成员变量的继承

1.1要点

子类用extends关键字继承父类。子类中可以提供新的方法覆盖父类中的方法。子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法。在子类中可以增加域,增加方法或者覆盖超类的方法,然而绝对不能删除继承的任何域和方法。

在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。

但是,子类不能继承父类的构造方法。 在子类的构造方法中可以通过 super 关键字调用父类构造方法。注意:该语句必须是子类构造方法的第一条语句。子类中的构造方法一定要调用父类的构造方法,否则编译出错。

1.2成员变量的继承

(1)关于私有成员变量

无论父类中的成员变量是私有的、共有的、还是其它类型的,子类都会拥有父类中的这些成员变量。但是父类中的私有成员变量,无法在子类中直接访问,必须通过从父类中继承得到的protected、public方法(如getter、setter方法)来访问。

例如:

 1 public class Father {
 2     private String name;
 3     private int age;
 4     public String getName(){
 5         return name;
 6     }
 7     public int age(){
 8         return age;
 9     }
10
11 }
12 public class Child extends Father{
13     public String getName(){
14         return super.getName(); //通过这种方式访问父类私有数据
15     }
16 }

(2)关于静态成员变量

无论父类中的成员变量是静态的、还是非静态的,子类都会拥有父类中的这些成员变量。

(3)关于被子类覆盖的成员变量

无论父类中的成员变量是否被子类覆盖,子类都会拥有父类中的这些成员变量。

 

2.方法重载与重写的区别

(1)方法的重写Overriding和重载Overloading是Java多态性的不同表现。

(2)重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

(3)重载:方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同

(4)重写:相同的方法名、返回类型和参数表。   注意:子类函数的访问修饰权限不能少于父类的

3.多态与动态绑定

3.1父类型变量引用子类型对象

例:Father father = new Child();

(1)父类类型的引用可以调用父类中定义的所有属性和方法,不能调用子类中定义而父类中没有的方法。
(2)父类中定义的方法:

如果子类中没有重写,则调用父类中定义的方法;

如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接

3.2多态总结:

(1)使用父类类型的引用指向子类的对象;
(2)该引用只能调用父类中定义的方法和变量;
(3)如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
(4)变量不能被重写(覆盖),“重写”的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

时间: 2024-08-02 06:58:24

java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定的相关文章

java基础-子父类中的成员变量

/*子父类成员特点 成员: 1.成员变量 2.函数 3.构造函数 变量: this: 代表当前对象的引用 this.变量 首先在本类中找所需要的这个变量,如果没有找到,再去父类中找 super:用于访问当前对象的父类成员 super.变量 直接在父类中找所需变量 */ class Pers{ String name="张三"; } class Stud extends Pers{ String name="李四"; void view(){ System.out.p

Java基础 成员变量的继承与覆盖

通过继承可以得到父类的成员变量,子类的成员变量包括从父类继承的成员变量(包括从祖先类中继承的成员变量)以及子类中重新定义的成员变量.本次介绍内容包括:可以继承哪些成员?如果子类和父类出现了相同的成员变量如何处理? 1.可以继承的成员变量 可以继承的成员变量与成员变量的访问控制类型有关,成员变量的访问控制类型包括public.protected.缺省的和private. 子类继承父类之后,可以继承父类的public和protected类型的成员变量.例如: public class Parent{

【Java】+反射1+获取属性/成员变量 的名称及类型

扩展链接:[Java]+反射2+设置属性/成员变量 的值 1.目标类 2.获取目标群类中的属性及属性的类型 3.代码 1 @Test 2 public void testA() { 3 Class clazz = ZGXRequest.class; 4 // step1 获取类中所有的属性 5 Field[] fields = clazz.getDeclaredFields(); 6 for (Field field : fields) { 7 // step2 获取每个属性的类型(以点分割 需

java反射获取类的所有成员变量(本类和基类)

我们知道在Java的反射机制中,最核心的一个类就是Class类. Class类中提供了两个常用的获取类的成员变量的方法. 方法1 getFields() /** * Returns an array containing {@code Field} objects reflecting all * the accessible public fields of the class or interface represented by * this {@code Class} object. *

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

Objective-C学习笔记(二十)——成员变量对对象方法与类方法的可见性分析

之前在学习C++,或者java的时候,都会遇到一个可见性的问题,这篇文章我们来讨论声明的成员变量对对象方法(减号方法)和类方法(加号方法)的可见性问题. (一)代码一:成员变量对减号方法可见,对加号方法不可见. 在People.m中声明一个成员变量:NSString *_peopleName;然后发现可以在减号方法中访问该变量,在加号方法中不可以访问该变量. -(void)ObjectShow{ NSLog(@"我是对象方法"); [email protected]"成员变量

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

[Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

在类中,变量根据定义的位置不同,可以分为成员变量和局部变量. 成员变量是在类体内,方法之外定义的变量,局部变量是在方法中定义的参数. 成员变量 成员变量分为类属性和实例属性,定义时没有static修饰的称为实例属性,有static修饰的称为类属性,类属性和实例属性的区别就是类属性是属于类的,它并不属于哪一个对象,它从这个类的准备阶段就一直存在,一直到这个类完全销毁.实例属性属于对象,只有某个对象被创建时,它才被创建,对象被回收,从属于该对象的实例属性也就被销毁了. 类属性的定义语法: [修饰符]

Java面向对象(二):成员变量—OOP中的内存管理—构造函数

第一节 成员变量 1.1成员变量与局部变量 成员变量:声明在类下面,方法外面:作用于整个类中: 局部变量:声明在方法下面,作用于方法下面. 1.2 成员变量默认值  成员变量的默认值和数组的默认值一样: 整数类型:0 浮点类型:0.0 字符类型:\u0000 布尔类型:false 字符串类型:null 1.3 成员变量和局部变量的区别  1.从声明的位置: 局部变量声明在方法中,成员变量声明在类下面. 2.从默认值方面: 局部变量没有默认值,成员变量有默认值. 3.从生命周期来说: 局部变量随着