Java中OOPS的重要概念是什么?

404 阅读4分钟

OOP是 "面向对象的编程",它由对象和类组成,因此在这里,编程是通过类和对象完成的。

OOP的概念

什么是 "类"?

OOP的A 在java中,一个蓝图包含了所有的方法、函数、主干,简单地说,整个代码都包含在类中,因此类是一个块,包含了所有的东西。

class class_name{

The code come here:

Methods/functions/main

}

什么是 "对象"?

它是一个现实世界的实体,如笔或椅子,用来调用类。所以任何类都可以在对象的帮助下被访问。

Class_Name Object_Name=new Class_Name();
This is the way to create an object of any class:
Object_Name.Method_Name();
This is how an object of a class access a method of that class:

继承(INHERITANCE

一个类获得其他类的所有属性的过程。因此,这个过程被称为 继承。

因此,继承属性的类被称为子类,其方法被继承的其他类被称为父类。

继承 的类型

在Java中,有多种类型的继承,基本上取决于各种条件,如:

单一的继承

在这种情况下,一个类扩展另一个类(只有一个类)。

单一继承

多重继承-

多重继承 一个类扩展了多个类。但Java不支持多重继承。

_多重继承_

多级继承

在_多级_继承中,一个类可以继承于一个派生类。因此,派生类成为新类的基类。

多级继承

分层继承

在这种情况下,一个类被许多子类所继承,因此父类被多个子类所继承。

分层继承

混合式继承

它是单继承和多继承的结合,因为它包含一个主父类和子多父类及多子类。

混合式继承

注意:

Java(不)支持混合/多重继承

继承代码的例子

class Employee{  
 float salary=40000;  
}  
class Programmer extends Employee{  
 int bonus=10000;  
 public static void main(String args[]){  
   Programmer p=new Programmer();  
   System.out.println("Programmer salary is:"+p.salary);  
   System.out.println("Bonus of Programmer is:"+p.bonus);  
}  
}  

多态性

这是一个概念,在这个概念中,我们可以_以不同的方式_执行一个单一的任务 _,_所以它的名字表明了它的工作原理,它来源于两个希腊词:poly和morphs。

因此,"poly "意味着许多,"morphs "意味着形式。

显示多态性的图片

两种类型:

1.运行时(Runtime: 是一个过程,其中对重载方法的调用是在运行时解决的,而不是在编译时。

1.运行时:包含了方法重载的过程,在这个过程中,我们在子类中继承了同名的方法。

2.编译时:是一个过程,其中一个类可以包含两个具有不同参数或没有参数的同名方法。

所以编译时不需要运行时的条件。

例子代码

"class Animal {
  public void animalSound() {
    System.out.println("The animal makes a sound");
  }
}

class Pig extends Animal {
  public void animalSound() {
    System.out.println("The pig says: wee wee");
  }
}

class Dog extends Animal {
  public void animalSound() {
    System.out.println("The dog says: bow wow");
  }
}

class Main {
  public static void main(String[] args) {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object
    myAnimal.animalSound();
    myPig.animalSound();Here
    myDog.animalSound();
  }
}

ABSTRACTION

一个 抽象是一个隐藏实现细节的过程,只向用户展示功能

简单地说,它是一个过程,用户只看到他感兴趣的信息,而不是整个细节。

所以Ac是抽象的最好的例子,我们只想知道如何使用它,而不是它是如何工作的。

显示抽象的图片

代码的例子

// Abstract class
abstract class Animal {
  // Abstract method (does not have a body)
  public abstract void animalSound();
  // Regular method
  public void sleep() {
    System.out.println("Zzz");
  }
}

// Subclass (inherit from Animal)
class Pig extends Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
}

class Main {
  public static void main(String[] args) {
    Pig myPig = new Pig(); // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}

封装

这个 ,就是_把代码_ 和_数据包装成一个单元_的_过程_ ,比如说,一个混合了几种药物的胶囊。

图片显示封装

因此,通过只提供一个setter或getter方法,你可以使这个类成为只读或只写的。

换句话说,你可以跳过getter或setter方法。它为你提供了对数据的控制。假设你想设置id的值,它应该只大于100,你可以在setter方法中写下逻辑。

你可以在setter方法中写下不存储负数的逻辑。这是一种在Java中实现数据隐藏的方式 ,因为其他类将无法通过私有数据成员访问数据。

示例代码

class Account {  
//private data members  
private long acc_no;  
private String name,email;  
private float amount;  
//public getter and setter methods  
public long getAcc_no() {  
    return acc_no;  
}  
public void setAcc_no(long acc_no) {  
    this.acc_no = acc_no;  
}  
public String getName() {  
    return name;  
}  
public void setName(String name) {  
    this.name = name;  
}  
public String getEmail() {  
    return email;  
}  
public void setEmail(String email) {  
    this.email = email;  
}  
public float getAmount() {  
    return amount;  
}  
public void setAmount(float amount) {  
    this.amount = amount;  
} } 
public class TestEncapsulation {  
public static void main(String[] args) {  
    //creating instance of Account class  
    Account acc=new Account();  
    //setting values through setter methods  
    acc.setAcc_no(7560504000L);  
    acc.setName("Sonoo Jaiswal");  
    acc.setEmail("sonoojaiswal@javatpoint.com");  
    acc.setAmount(500000f);  
    //getting values through getter methods  
    System.out.println(acc.getAcc_no()+" "+acc.getName()+" "+acc.getEmail()+" "+acc.getAmount());  
}  
}