JAVA OOP第二课

一、继承:extends

1、概念

1、概念:子类继承父类,在每一个子类对象中都有一个独立的父类对象。

//子类KBStudent继承了父类Student
public class KBStudent extends Student {
   
 }

1)this是当前对象,this(参数列表)在当前类的构造方法中调用其他重载构造。

//非全参构造
 public Student(String stuNo,String stuName,char gender){
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.gender = gender;
    }
//全参构造
public Student(String stuNo,String stuName,char gender,int age,String product){
        this(stuNo, stuName, gender);
        //在当前类的全参构造中调用了非全参的重载构造
        this.age = age;
        this.product = product;
    }

2)super是父类对象,super(参数列表)在子类构造中调用父类的构造。

public class KBStudent extends Student {
    private double expectSalary;

    public KBStudent() {}

    public KBStudent(String stuNo, String name, int age, char gender, String qualification, String major,double expectSalary) {
        super("课工场大数据", stuNo, name, age, gender, qualification, major);
        this.expectSalary = expectSalary;
    }

3)this()或者super()必须位于当前构造方法的第一句
2、继承是一种高级封装
3、不能继承父类的内容:
1)私有的private
2)构造方法(Constuctor)
3)非同包父类受保护类型protected
4、通过访问修饰符和包进行访问权限控制

访问修饰符类内同包不同包子类其他
private*
default**
protected***
public****

5、三种方法代码块比较
构造方法<普通代码块<静态代码块

 static {
        for (int i = 0; i <4 ; i++) {
        }
        int a = 7;
        System.out.println("父类静态代码块");
    }

    {
        int a = 7;
        System.out.println("父类普通代码块");
    }

    {
        int a = 7;
    }

    public Father(){
        System.out.println("父类构造方法");
    }


结果如下:

父类静态代码块
父类普通代码块
父类构造方法

2、static:

(1)被static修饰的属性和方法称之为类属性和类方法,无需对象,通过类名就可以直接访问。

package lian;

public class Lianxi02 {
    private static String  stuNo;
    private String stuName;


    public static void main(String[] args) {
        Lianxi02.stuNo = "123";  //stuNo 被static修饰,所以访问时就可以直接通过类名Lianxi02直接访问
        Lianxi02 s = new Lianxi02();  //而stuName没有被static修饰,所以访问时需要新建对象,通过对象s访问
        s.stuName = "123";
    }    
}

(2)JVM启动时装载字节码文件过程中创建所有静态内容,当JVM关闭时static内容才会被销毁。
(3)当属性和方法使用率较高时,且当前工程中许多类需要使用时,用static修饰属性和方法,避免每调用一次属性或者方法都去创建一个对象。
(4)静态方法只能访问静态属性和静态方法

  private static String  stuNo;
    private String stuName;
    private  char gender;


    public static String getStuNo() {
        return stuNo;
    }

    public static void setStuNo(String stuNo) {
        Lianxi02.stuNo = stuNo; // 静态方法访问静态属性
        this.stuName = stuName; 
        // 报错:Non-static field 'stuName' cannot be referenced from a static context ,静态方法不能访问非静态属性
        
    }

3、重写

(1)重写:子类重写父类同名同参同返回值的方法。

4、转型

概念

1、概念:有继承关系的对象类型转化
2、自动类型转化:父类引用指向子类对象。
3、强制类型转化:不是将父类对象转化为子类对象,而是通过instanceof运算符判定父类引用指向子类对象的实际类型;否则会导致类型转化异常。报错:java.lang.ClassCastException

public class Lianxi03 {
    public static void main(String[] args) {
        List array = new ArrayList();
        array.add(123);
        array.add('男');
        array.add(1,"张三");
        array.add("李四");

		Object s = ((ArrayList) array).clone();  //强制类型转换
        System.out.println(s);
  }

5、多态

1、一种类型多种表现形式。
2、继承
3、重写
4、实际方法:一个父类有多个子类,在构造方法时以 父类的引用作为形参,在调用时,传入不同子类对象实参。

二、抽象类:abstract

1、可以有抽象方法,由abstract修饰的方法,只能做方法的声明,不能做方法的实现。

package lian;

public abstract class Lianxi04 {
    private String stuName;
    private String stuNo;
    private int age;

	//抽象方法只做声明,不做实现
    public abstract String getStuName(); 

    public abstract String getStuNo(); 
    
}
package lian;

public class Test extends Lianxi04 {
	//子类继承父类,对其抽象方法进行重写。
    @Override
    public String getStuName() {
        return null;
    }

    @Override
    public String getStuNo() {
        return null;
    }
}

2、子类必须重写抽象父类中的抽象方法,除非子类也是抽象类。
3、抽象类不可以直接实例化。

package lian;

public class Test extends Lianxi04 {
    Lianxi04 ss = new Lianxi04();
	//报错:'Lianxi04' is abstract; cannot be instantiated
	//Lianxi04为抽象类,不可以实例化
}

三、接口:interface

1、方法默认为公共的抽象方法,属性默认为公共的静态常
2、子类必须实现父类接口中的所有抽象方法,除非子类是接口或者抽象类;接口与接口之继承用extends

package mgr;

public interface ArrayList {
    void add(String name);
    void remove(String name);
    void show();

}
package mgr;

//子类ClassMgr继承父类接口ArrayList,子类必须声明与实现父类接口的方法。

public class ClassMgr implements ArrayList{
    @Override
    public void add(String name) {
    }

    @Override
    public void remove(String name) {
    }

    @Override
    public void show() {
    }

3、接口不可以直接实例化。
4、作用
(1)同步开发,定交换标准。
(2)隐藏实现。
5、接口与父类的 差别:
(1)单继承:一个子类只能继承一个父类。
(2)多实现:一个子类可以继承多个父类接口,
(3)父子关系:

四、泛型

1、引用类型参数化。

package kb08.util;
//类级泛型
public interface List<T> extends Iterable <T> {
	 int size();
	 boolean isEmpty();
	 Object[] toArray();
 }
	 

2、类级泛型
3、方法级泛型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值