JAVA面向对象的三大特性 继承

1 java中的继承是单继承(每个人只有一个父亲)
2 继承的好处:
(1)子类拥有父类的所有属性和方法。
父类的属性修饰符为private则无效。
(2)复用父类的代码(代码复用)
语法规则:
class 子类 extends 父类
 
方法的重写:
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的的,当调用方法时,会优先调用子类的方法。
语法规则:
返回值类型,方法名,参数类型及个数都要与父类继承的方法相同,才叫方法的重写
 
继承的初始化顺序:
1 初始化父类再初始化子类
2 先执行初始化对象中的属性,在执行构造方法的初始化。
初始化顺序:
父类对象 ---属性初始化---构造方法---子类对象---属性初始化---构造方法
 
final关键字:
1 使用final关键字做标识有"最终的"含义
2 final可以修饰类,方法,属性,和变量
final修饰类,则该类不允许被继承
final修饰方法,则该方法不允许被覆盖重写
final修饰属性,则该类的属性不会进行隐式的初始化(就不会自动为我们进行初始化)
 
类的初始化属性必须有值,我们有两种方法为属性进行初始化:
1 创建变量属性时
2 在构造方法中
只能选择其中一种进行初始化。
3 final修饰变量,则该变量的值只能赋一次值,即变为常量 (static final 会使其成为全局常量)
 
Super关键字:
在对象的内部使用,可以代表父类的对象
访问父类的属性和方法
super.属性;super.方法;
Super()方法和构造方法之间的关系:
子类的构造过程当中必须调用其父类的构造方法。
 1 public class lx1 {
 2     public int age =10;
 3     public String name;
 4     public void eat(){
 5         System.out.println("ME IS 父类的!");
 6     }
 7     public lx1(){
 8         System.out.println("我是父类的构造方法!");
 9     }
10 }
11 
12 package com.lx;
13 public class lx2 extends lx1 {
14     public lx2() {
15         System.out.println("我是子类的构造方法!");
16     }
17     public static void main(String[] args) {
18         lx2 l2 = new lx2();
19     }
20 }
输出结果:
我是父类的构造方法!
我是子类的构造方法!
 
main函数中创建lx2对象时,lx2类的构造方法中系统默认写了Super()方法,帮助我们调用了父类的构造方法
如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。
如果子类的构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错
 
object类
object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类默认继承object类。
object类中的方法,适合所有子类
 
1 toString()方法
在object类里面的toString()方法,返回对象的哈希code码(对象的字符串地址)
哈希code相当于对象的身份证号,可以通过重写toString()方法来表示出对象的属性
重写lx1类的toString方法:
1 @Override
2 public String toString() {
3     return "lx1 [age=" + age + ", name=" + name + "]";
4 }
 
2 equals()方法
比较的是对象的引用是否是同一块内存地址
Dog dog = new Dog();
很多人认为dog就是我们创建的对象,其实不然,它仅仅是我们对象在内存中的地址,其实在操作这个地址的时候,就是间接的操作了我们的对象的值
一般情况下我们比较的是两个对象的值是否相同,我们可以对equals()方法进行重写操作:
 1 public boolean equals(object obj){
 2 ifthis == obj)//判断两个引用的地址是否相同
 3     return true;
 4 }
 5 if (obj==null//判断obj是否是空值
 6 {
 7     return false;
 8 }
 9 ifgetClass()!=obj.getClass()){
10 return false;
11 }
12 Dog othre = (Dog)obj;//把传进来的对象转换成Dog类型
13 if (age!=other.age){//判断属性的值是否相同
14 return false;
15 }
16 return true;
17 }
getClass是可以得到一个类对象,当我们new一个对象的时候我们可以得到的对象叫做类的对象,如果我们这个对象调用getClass()方法,我们得到的是类对象。
getClass()可以得到一个类对象,当我们new的时候得到的是一个类的对象如果对象调用getClass()方法我们得到的是类对象,类对象描述的是类的代码信息(类的代码信息:这个类有哪些属性\它是什么类型\变量名是什么\它有哪些方法\方法名是什么\方法里面的代码是什么;而类的对象关注的是对象的属性值的信息或者说这个对象的数据信息)
posted @ 2018-01-18 08:22  初心不变1  阅读(285)  评论(0编辑  收藏  举报