OOPS |使用 Java 作为扩展和限制的泛化
原文:https://www . geesforgeks . org/oops-generalization-as-extension-and-restriction-use-Java/
一般化是从两个或多个类中取出公共属性和功能,并将它们组合成另一个类的过程,该类充当这些类的父类,或者我们可以说这些专用类的一般化类。所有的子类都是一种超类。所以我们可以说子类“是-A”超类。因此,概括被称为“是-一种关系” 这里有一个概括的例子:
在这个图中,我们看到有两种类型的航班,所以我们制定了一个包含共同属性的航班等级,然后我们有一个国际和国内等级,这是航班等级的延伸,将有航班属性以及他们自己的属性。这里 flight 是父/超类,另外两个是子/子类。国际航班和国内航班一样都是“a”级航班。
例 1:泛化为扩展
// super or parent class
class Person
{
static int count = 1;
String name;
int age;
String gender;
}
// subclass or child of Person
class Student extends Person
{
// name, age and gender
// get inherited from Person
int rollNo;
String course;
}
// subclass of Person
class Teacher extends Person
{
// name, age and gender
// get inherited from Person
static int count = 20;
String subject;
int experience;
}
class Test {
public static void main(String[] s)
{
Teacher t = new Teacher();
t.name = "Shaan";
// name gets inherited in teacher
System.out.println(t.name);
// will give priority to its own count
System.out.println(t.count);
}
}
Output:
Shaan
20
说明:我们有两个班级老师和学生,他们有共同的属性,如姓名、年龄和性别,所以我们制作了另一个班级人,它有这些属性,然后从它扩展了这两个。现在,当我们创建一个教师类的对象时,我们就拥有了人类的所有属性。这里我们看到教师类有自己的 count 值,所以这将隐藏家长的值。我们没有在教师课堂上给出“名字”属性,但我们仍然在使用它。这是因为父类的所有属性和方法都继承到了子类中。我们在教师类中给出了仅属于教师类的附加属性。这些附加属性显示了泛化为子类提供的扩展。
例 2:泛化为限制
// abstract super class
abstract class User
{
String name;
int age;
String occupation;
// abstract method
abstract void fillForm(String name, String occupation);
}
// non abstract sub class of User
class Doctor extends User
{
String specialization;
// extra attributes
int experience;
// doesn't give implementation of fillForm() method
}
class Test {
public static void main(String[] s)
{
User u = new User();
// extra attribute of child class so will
// not be accessible to parent class
u.experience = 10;
}
}
输出: 3 个错误–
-
医生不是抽象的,不会覆盖用户
java class Doctor extends User ^
中的抽象方法 fillForm(字符串,String) 2. 用户是抽象的;无法实例化
java User u = new User(); ^
-
cannot find symbol
java u.experience = 10; ^
符号:可变体验 位置:用户类型的可变 u
说明: User 是一个抽象类,它有一个抽象 methodfillForm(),因为对于一个病人和医生来说表单会有所不同,所以填写表单也会有所不同。现在博士班要么必须提供自己的身体,要么必须声明自己是抽象的。这是超类对子类的限制,即子类必须继承其所有属性和功能,并且不能跳过任何属性和功能。它们可以通过覆盖现有特性来提供另一种实现,但不能跳过它。在这种情况下,这将生成编译错误,因为医生既不是抽象的,也没有为 fillform()方法提供主体。另一个原因是用户类没有体验属性,它只在医生类中,所以用户不能访问它。
在上面的例子中,我们看到一个子类必须从它的父类继承所有的特性,尽管它可以通过覆盖它来改变它的实现,但是它不能忽略父类的任何特性。这说明了概括的限制性形式。 我们还看到子类有自己的属性,父类对象不能使用,因为这些扩展属性只属于子类。这种额外属性的添加显示了 一种可扩展的概括形式。
版权属于:月萌API www.moonapi.com,转载请注明出处