提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Java的核心理念是面向对象编程。实际上,所有Java程序都遵循这一原则,你没有其他选择。这与C++有所不同,因为在C++中,你可以决定是否采用面向对象的方式。在Java中,面向对象编程是不可分割的,因此在编写任何简单的Java程序之前,理解其基本原则是非常重要的。我希望可以通过下面的讲解帮助你更好的理解。
一个类可以看作是一个蓝图,用来定义一组对象的共同特点和行为。想象一下,类就像是制造相同玩具的模具,而每一个由这个模具生产出来的玩具就是一个对象。
定义类的代码如下:
// 定义一个类
class Dog {
// 对象属性:名字
String name;
// 构造方法,创建对象时会调用
public Dog(String name) {
this.name = name; // 初始化名字
}
}
每个对象都有自己的属性和功能,它们遵循这个类的定义。因为它们都是由同一个蓝图“铸造”出来的,所以我们说这些对象是这个类的实例。简单来说,类是一个抽象的概念,而对象则是实际存在的实体。
下面的代码就是这个类的实例化,即对象:
// 主类
public class ceshi {
public static void main(String[] args) {
// 创建对象(实例化)
Dog dog1 = new Dog("Puppy");
}
}
就像把珍贵的秘密安全地放入一个锁住的盒子,封装保护了对象的内部状态,只有通过特定的方法才能访问。
封装的优势在于,用户可以轻松地使用功能,而不需要了解其内部的具体实现。这样的设计确保了用户不用担心错误使用可能引发的问题,从而可以更加安心和高效地利用这些功能。
代码如下(示例):
class Dog {
private String name = "Puppy"; // 私有属性,即封装起来了
public String getName() {
return name; // 提供一个获取名字的方法
}
}
通过继承,我们可以创建一个新类(子类),它可以重用父类(基类)的方法和属性。这就像你的外貌从父母那里继承来的基因。
举个例子,如果我们有一个“动物”类,它包含基本的特征,比如“Eating”。然后我们可以创建一个“狗”类,这个类都可以继承“动物”类。这意味着“狗”默认拥有“Eating”的能力,但它们也可以添加自己的特征,比如“狗”可以有“Wang”这个特性。
代码如下:
// 父类:动物
class Animal {
void eat() {
System.out.println("Eating~~~~~");
}
}
// 子类:狗
class Dog extends Animal {
private String name = "Puppy"; // 私有属性
// 提供一个获取名字的方法
public String getName() {
return name;
}
// 狗类特有的方法
public void bark() {
System.out.println(name + "Wang~~wang~");
}
}
public class ceshi {
public static void main(String[] args) {
Dog myDog = new Dog();
// 使用继承的方法
myDog.eat(); // 输出:动物在吃东西
// 使用子类特有的方法
myDog.bark(); // 输出:小狗在叫
}
}
多个对象可以通过同一个接口(方法)进行操作,但具体的实现会因为对象的不同而有所差异。
举个例子:还是有一个“动物”类,它包含基本的特征,还是“能叫”。然后我们可以创建一个“狗”类和一个“猫”类,这两个类都可以重写父类的方法。即同一方法或操作在不同对象上可以表现出不同的行为。
代码如下:
// 父类:动物
class Animal {
public void makeSound() {
System.out.println("动物在叫");
}
}
// 子类:狗、猫
class Dog extends Animal {
// 进行重载,体现其多态性
@Override
public void makeSound() {
System.out.println("Wang~~wang~");
}
}
class Cat extends Animal {
//进行重载,体现多态性
@Override
public void makeSound() {
System.out.println("Miao~~~miao~");
}
}
public class ceshi {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // 输出:小狗
myCat.makeSound(); // 输出:小猫
}
}
抽象提供了一个框架,让我们能够在不同的子类中实现具体的方法。就像抽象画——每个人都有自己的解释。
抽象是面向对象编程的一种重要特性,主要用来定义一种简单的接口或基础类,而不直接实现具体行为。抽象可以通过抽象类(abstract class)和接口(interface)来实现。
举个例子:还是小狗的例子,先定义一个抽象类和抽象方法:
// 抽象类
abstract class Animal {
// 抽象方法,没有实现
abstract void bark();
// 具体方法
void eat() {
System.out.println("Eating~~~");
}
}
第一种,由子类继承这个抽象类:
// 具体子类
class Dog extends Animal {
// 实现抽象方法
@Override
void bark() {
System.out.println("Wang~~~~wang~");
}
}
第二种,可以用接口实现。
接口是实现抽象的重要手段之一。在Java中,接口定义了一组可以由类实现的抽象行为。
class Cat implements Animal {
@Override
public void bark() {
System.out.println("Miao~~miao~~");
}
@Override
public void eat() {
System.out.println("Cat is eating.");
}
}
以上就是我要讲的内容,本文仅仅简单介绍了Java面向对象编程的简单例子,希望可以帮到大家。