1.私有的定义

如果一个方法里面的属性是由private修饰的话就无法被继承 私有

用private修饰的属性想要调用的话得通过get或set方法 私有

 

2.公有属性

公有属性Public则可以直接调用

 

3.extends

利用extends关键字表明**类继承**类

继承使子类可以直接使用父类的菲斯有属性和方法

 

1.父类是无法使用子类的自由成员属性的(无论共有还是私有)

2.兄弟之间也是无法共享自有成员属性的(无论共有还是私有)

 

小结:

一个子类只能有一个父类

子类可以访问父类非私有成员

子类自己自由成员其他兄弟无法访问

父类不可以访问子类的自由成员

 

4.方法的重写

对于方法的重写,指的是在子类中重新描述父类中的方法

方法的重写,要求返回值类型,方法名,参数类型、顺序、个数都要与父类继承的方法完全一致。

实现方法的重写  实际上是子类不想直接使用父类中的方法逻辑,要求针对自身情况做出修改

当子类重写父类方法之后,子类对象调用的是重写之后的方法。

 

方法重载与方法重写

在学习中,我们有可能会把方法重载和方法重写混淆。所以我们来通过一个表格认识一下方法重载与方法重写的区别

方法的签名是由方法的方法名和形参列表(注意:包含方法的参数和类型)组成

  方法重载 方法重写
类关系 发生在同一个类中 发生在有继承关系的子类与父类中
方法签名 方法名相同,参数列表不同(参数顺序、个数、类型) 方法名相同,参数列表相同(参数顺序、个数、类型)
返回值 返回值任意 返回值相同或返回值呈现父子关系
访问修饰符 访问修饰符任意 访问修饰符的访问范围需要大于等于父类的访问范围
参数名 与方法的参数名无关 与方法的参数名无关

 

当要实现重写的方法的话 重写方法的访问修饰符必须是比父类的方法问修饰符范围大  也就是private<default<protected<public

 

[email protected]注释

通过@Override//该注解用于去验证注解下的方法是否属于重写方法

如果不是重写方法就会出现的报错(参数名不变 参数数据类型相同  参数名可以不同)

如果是重写的话就不会出现任何的报错

 

重写方法就是在子类当中利用重写覆盖了父类当中的方法  调用的话是直接调用子类当中的重写方法的

 

Java依靠方法签名区分方法(有方法名和参数列表组成)

 

重写方法的返回值必须相同或呈现父子关系

 

虽然Java不存在属性的重写,但是它可以在子类中定义与父类类同名的属性

 

在不同的包中使用其他包中的类需要引用,在同一个包中应用不是private的类不需要引用

 

6.修饰符属性:

Private修饰的内容只能在本类中被使用(换了一个类或者换了一个包之后就无法被调用了)

最大访问范围在同一个类 常用来修饰类的属性

 

Default访问修饰符default和switch中的default不同 作为访问修饰符的default不可以被明确的写出来  (String name)正确       (Default String name)错误

最大访问范围在同一个包中 不怎么常用

 

Protected  使用extends继承父类后的子类跨包子类!!!在不同包的子类中使用被protected修饰的内容是有限制的 需要借助new出子类对象  然后通过子类对象去进行调用父类中被protected修饰的内容

最大访问范围在不同包的子类当中 常用于父类为子类准备的属性和方法,即父类不打算使用这些属性和方法

 

Public 不管是在本类中还是跨包引用都可以被调用,访问权限最大

最大访问范围是全局范围 常用来修饰类的方法

访问修饰符

访问控制修饰符能修饰的对象包括:属性方法构造器
访问修饰符可以用来限制成员被访问的范围,即用来控制被修饰的成员可以在哪里(包)被使用。

  private default protected public
同一个类
同一个包  
子类    
全局范围      
  • private: 只允许在本类中进行访问(访问权限最小的)
  • public: 允许在任意位置访问(访问权限最大的)
  • protected: 允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
  • default: 允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用

在实际的开发中,大部分的场景使用 private 定义属性,public 定义方法。

 

7.关键字Super

Super关键字代表着对父类对象的引用 this代表着对本类对象的引用 调用本类的属性和方法

Super只能写在子类定义的方法中,在main方法中不能直接使用spuer  调用父类的属性和方法

  1. 子类重写父类的方法,则父类的方法会被隐藏,隐藏的方法或者成员变量可以通过super关键字访问
  2. 引入super关键字的原因是可以使用被隐藏的成员变量和方法,而且super只能在子类的方法中定义使用

父类的构造方法不允许被继承,不允许被重写

 

无论是通过子类的有参或无参构造器构造

 

先加载父类静态属性

加载父类静态代码块

记载子类的静态属性

加载子类的静态代码块

进入子类的构造器

由子类构造器继承父类静态资源

加载子类的静态代码块

进入子类的构造器(没有加载)

由子类构造器进入父类构造器

加载父类的成员属性

加载父类的构造代码块

加载父类的构造器

直接加载子类的构造代码块(没有加载子类成员属性)

加载了子类的构造器

生成子类对象

 

 

构建子类对象一定会加载父类的构造器

 

在创建子类对象时,如果没有明确指示的话,调用的是父类的无参构造器

所以在写一个类的时候一定得保证编写一个无参构造器

 

Super必须写在构造器的第一行

一个构造器中this()和super()只能选择一个

Super(添加父类多参构造器的对应参数)调用的是父类的构造器

总结:

  1. 子类默认调用父类无参构造方法;
  2. 可以通过super()调用父类允许访问的其他构造方法;
  3. super()必须放在子类构造方法的有效方法的第一行,而且只能出现一次。
  4. this()super()在同一构造器中只可能出现一个。

super,this,super()和this()

  super this super() this()
用处 super可以用在子类的成员方法中 this可以用在本类中的成员方法中 super()可以用在子类的构造器中 this()可以用在本类的构造器中
目的 调用父类非私有(no private)的成员变量或方法 调用本类的成员变量或方法 调用父类的构造器 调用本类的构造器

super和this可以同时出现的,而super()和this()不能同时出现在一个构造器中

 

不写无参构造器,该类无法被继承-在所有的子类明确指示不适用父类的无参构造器时,可以不写无参构造器

 

8.equals

Java继承+重写+(super和final)关键字

上面的代码返回值都是false  作用都是比较这两个所指向的内存地址是否一致

 

Java继承+重写+(super和final)关键字

 

如果一个方法的参数为引用类型,实际参数可以是该引用类型对象及其子类对象

9.Object类

Object类是所有类的老祖宗,如果有一个类没有显式的说明继承自哪个类,那么该类就默认的继承Object类。
对于Object类,它有着如下的特点

  1. Obejct类是所有类的父类
  2. 一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组)
  3. Java中每个类都可以使用Ojbect类中定义的方法
    接下来,我们就来结合Java API(JDK文档)来看看Java中对于Object类的介绍
    文档地址:http://www.matools.com/api/java8

当参数为Object类型时,因为Object时所有类的父类,所以参数其实可以是任意类型

 

Equals方法用于比较调用当前equals方法的对象和参数对象是否相等

Java继承+重写+(super和final)关键字Java继承+重写+(super和final)关键字

 

如果一开始就强制改变输入的Object类型为某种数据类型来进行比较

则调用对比的时候 数据类型对比会优先对比与自己数据类型相近的数据类型方法比较

 

10.final

在定义方法或属性时,访问修饰符位置和控制修饰符位置可以互换

Final在修饰属性的属性值时不可修改的 

Final修饰的属性可以通过设置初始值赋值

Final修饰属性时无论在什么方法中都不可以赋值

Final修饰的属性只可以在全部的构造器(无参构造器和有参构造器)中赋值

Final修饰的属性可以在构造代码块中赋值

如果是static final修饰的属性的话 就需要在静态代码块中进行赋值

 

Final当修饰的变量是引用数据类型,对象不允许再重新实例化(不想允许再被new),但此对象的属性值是可以更改的

 

Final很少用来修饰类和方法  最常用的就是修饰属性  和static共用

Final static修饰的内容一般常量名是字母全部大写

Final不能修饰构造方法

相关文章: