龙空技术网

面向对象基本特征继承

尚硅谷教育 87

前言:

眼前你们对“js的getvalue”都比较关怀,姐妹们都想要剖析一些“js的getvalue”的相关知识。那么小编同时在网络上搜集了一些对于“js的getvalue””的相关内容,希望各位老铁们能喜欢,你们一起来了解一下吧!

1. 继承的概念

一个类从另外一个类继承所有成员, 包括属性和方法, 但是不包括构造器和语句块

从现有类创建子类, 现有类就称为父类, 基类, 超类.

为描述和处理个人信息,定义类Person:

public class Person {public String name;public int age;public Date birthDate;public String getInfo(){...}}

为描述和处理学生信息,定义类Student:

public class Student {public String name;public int age;public Date birthDate;public String school;public String getInfo(){...}}
2. 为什么要继承

Ø 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

Ø 此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:“子类 is a 父类”

当一个类和另外一个类的属性和方法完全相同, 并且同时又比另一个类多一些特有的属性和方法时, 前者就可以做成后者的子类, 子类继承父类的所有成员, 这样, 在子类中就可以省略从父类继承的成员, 便于代码的复用, 以及更统一的类型管理.

3. 继承语法

class 子类 extends 父类 {}

从语法意思来看, 子类是扩展自父类, 也可以理解为子类是在以父类为基础的前提下, 进一步扩展一些属性和方法, 所以子类大于父类, 或者也可以说, 子类包含父类。

public class Person {public String name;public int age;public Date birthDate;public String getInfo() {...}}public class Student extends Person{public String school;}//Student类继承了父类Person的所有属性和方法,并增加了一个属性school。//Person中的属性和方法,Student都可以使用。

l 作用:

Ø 继承的出现提高了代码的复用性。

Ø 继承的出现让类与类之间产生了关系,提供了多态的前提。

Ø 不要仅为了获取其他类中某个功能而去继承

4. 继承的特点

①子类继承父类的所有成员(构造器除外), 就意味着父类的私有成员也会被子类继承, 但是因为私有成员只能被本类访问, 所以即使是在子类中也不能直接访问从父类继承的私有成员, 可以通过从父类继承的公共的get/set方法间接访问.

public class Person {private String name;private int age;private Date birthDate;public void setName(String name) {this.name = name;}public String getInfo() {...}}public class Student extends Person{public String school;public void test() {//name = “小明”; // 不可以, 因为是私有的setName(“小明”);// 可以, 通过公共方法间接访问}}

②单继承

Java只支持单继承,不允许多重继承

一个子类只能有一个直接父类

一个父类可以派生出多个子类

class SubDemo extends Demo{ } //ok

class SubDemo extends Demo1,Demo2...//error

在继承关系中, 一个类Person可以被另外的类Soldier和Student和Officer继承, 然后Student又被Graduate类继承, 这是允许的, 在这样的体系中, Graduate类也称为Person类的子类, Person类也称为Graduate类的父类, 这样的继承我们称之为多层继承. 在这样的体系中, Student类称为Graduate类的直接父类, 显然地, Person类称为Graduate类的间接父类, 在java中, 多层继承是被允许的.

Java中不允许的多继承是指多重继承, 也就是说一个类不允许有多个直接父类, 间接父类并没有个数限制. 称之为单继承.

方法覆盖(override)

1. 什么是方法覆盖

定义

在子类中可以根据需要对从父类中继承来的方法进行改造,

也称方法的重写、重置。在程序执行时,子类的方法将覆盖父类的方法。

要求:

覆盖方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。

覆盖方法不能使用比被重写方法更严格的访问权限。

覆盖和被覆盖的方法必须同时为非static的。

子类方法抛出的异常不能大于父类被重写方法的异常

public class Person {public String name;public int age;public String getInfo() {return "Name: "+ name + "\n" +"age: "+ age;}}public class Student extends Person {public String school;int age;public String getInfo() { //重写方法return "Name: "+ name + "\nage: "+ age + "\nschool: "+ school;}public static void main(String args[]){Student s1=new Student();s1.name="Bob";s1.age=20;s1.school="school2";System.out.println(s1.getInfo()); //Name:Bob age:20 school:school2 执行的是子类重写过的方法}}

2.为什么要方法覆盖

有的时候子类继承的父类方法并不能满足子类的需要, 而方法名称又要保持一致, 此时用到方法覆盖.

3. 方法覆盖的特殊性

子类一旦把父类的方法覆盖, 那么在测试类中再无法通过子类对象调用父类的被覆盖方法了, 因为子类已经把父类的方法重写了, 如果有调用父类方法的需求, 只能通过再创建一个父类对象来调用.

4. @Override注解的使用

有的时候, 在子类中写重写方法时, 容易出现一些低级的拼写错误, 或其他错误, 导致方法不能正确覆盖时, 程序的运行就会出乎意外, 所以为了防止这种现象, 在子类的覆盖方法上添加修饰符@Override注解.

注解 : 本质上一种类, 也是一种特殊的注释, 所以一般情况下, 程序不执行注解, 但是会被编译器, 运行时所识别和处理(通过反射的方式).注解也有很多.

@Override注解的作用是告诉编译器, 在编译程序时, 必须先检查此方法是否满足方法覆盖的条件, 如果不满足, 则编译出错, 这样强制程序员通过排查, 提前检查方法覆盖的问题.

public class Student extends Person {public String school;int age;@Override // 加上注解, 也能提高代码可读性public String getInfo() { //重写方法return "Name: "+ name + "\nage: "+ age + "\nschool: "+ school;}}
四种访问权限

1. 为什么需要访问权限

有的时候, 类中的一些成员需要控制可以被哪些范围的其他类所访问, 就可以使用访问控制修饰符来控制.

2. 访问权限

四种访问权限修饰符

Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类对象成员的访问权限。

对于class的权限修饰只可以用public和default。

Ø public类可以在任意地方被访问。

Ø default类只可以被同一个包内部的类访问。

class Parent{private int f1 = 1;int f2 = 2;protected int f3 = 3;public int f4 = 4;private void fm1() {System.out.println("in fm1() f1=" + f1);}void fm2() {System.out.println("in fm2() f2=" + f2);}protected void fm3() {System.out.println("in fm3() f3=" + f3);}public void fm4() {System.out.println("in fm4() f4=" + f4);}}class Child extends Parent{ //设父类和子类在同一个包内private int c1 = 21;public int c2 = 22;private void cm1(){System.out.println("in cm1() c1=" + c1);}public void cm2(){System.out.println("in cm2() c2=" + c2);}public static void main(String args[]){int i;Parent p = new Parent();// i = p1.f1; // 不可以访问其他类的私有成员i = p.f2;// i = p.f3; i = p.f4; p.fm2();// p.fm3(); p.fm4();Child c = new Child();i = c.f2; // i = c.f3; i = c.f4;i = c.c1; // i = c.c2;//c.fm1(); // 不能访问c.cm1(); // c.cm2(); c.fm2(); c.fm3(); c.fm4() 都能访问}}

3. 访问权限的使用注意

protected是被保护的, 容易从字面意思理解成它的范围会比较小, 但是其实被protected修饰的成员的访问范围是仅次于public的, 所以要小心。

更多内容:

javaweb内容js\java中json的使用

java 枚举的定义与用法

Java 的抽象类是什么

java运算符详细介绍

java技术教程IOC和DI

标签: #js的getvalue