java基础(四)

一.继承

1.如何使用继承

编写父类

class Pet { 
        //公共的属性和方法
}

编写子类,继承父类

class Dog extends Pet { 
        //子类特有的属性和方法
}

只能继承一个父类

2.子类访问父类成员

访问父类构造方法: 使用super关键字,super代表父类对象,在子类的构造方法中调用,且必须是第一句

super();
super(name);

访问父类属性

super.name;

访问父类方法

super.print();

super关键字来访问父类的成员

super只能出现在子类的方法和构造方法中

super调用构造方法时,只能是第一句

super不能访问父类的private成员

子类能访问父类的所有资源吗?

不能被继承的父类成员:

  • private成员 
  • 子类与父类不在同包,使用默认访问权限的成员
  • 构造方法

3.访问修饰符总结

private : 本类

默认(friendly) : 本类, 同包

protected : 本类,同包,子类

public : 本类,同包,子类, 其他

 4.多重继承关系的初始化顺序

父类属性 - > 父类构造方法 - > 子类属性 -> 子类构造方法

5.何时使用继承

  • 当符合is-a关系时

继承是代码重用的一种方式:

将子类共有的属性和行为放到父类

6. 重写

构造方法会被重写吗?

不能被继承,因此不能重写。

方法重写的规则?

  • 方法名相同
  • 参数列表相同
  • 返回值类型相同或者是其子类
  • 访问权限不能严于父类

方法重载和方法重写

 7.抽象类

abstract 关键字

可以用于类,也可以用于方法。

抽象方法没有方法体

抽象方法必须在抽象类里

抽象方法必须在子类中被实现,除非子类是抽象类

8.final用法

final 用于类:表示类不能被其他类继承

public final class Penguin extends Pet { 
      //
}

用于方法:表示方法不能被重写

public final void print () { 
      //
}

用于属性:表示属性值不能被修改

public class Penguin {
       final String  home ="南极";// 居住地
       public void setHome(String name){
       this.home=home; //错误,不可再赋值
    }
}

使用final修饰引用型变量,变量的值是固定不变的, 而变量所指向的对象的属性值是可变的

9. Object类

Object类是所有类的父类

一个类如果没有使用extends显示的继承另外一个类, 那么这个类就继承自Object类。

Object类的主要方法

(1)toString()方法

(2)equals()方法

10. 内部类

把一个类定义在另一个类的内部称为内部类

package cn.bjsxt.demo;//声明包 
class Outer//声明类
{
    private String info="hello World";//声明私有属性
    class Inner//声明类
    {
        public void print(){//打印输出的方法
            System.out.println(info);
        }
    }
    public void fun(){//定义方法
        new Inner().print();//通过内部类调用方法
    }
}
public class TestOuterAndInner2//测试类
{
    public static void main(String [] args){
        new Outer().fun();//调用方法
    }
} 
原文地址:https://www.cnblogs.com/Vincent-yuan/p/13041327.html