一:面向对象(OOP)
1.定义
过程编程是关于编写对数据执行操作的过程或函数,而面向对象编程是创建同时包含数据和函数的对象
2.优点
OOP 更快更容易执行
OOP 为程序提供了清晰的结构
OOP 有助于保持C#代码"不重复自己",并使代码更易于维护、修改和调试
OOP 使得用更少的代码和更短的开发时间创建完全可重用的应用程序成为可能
3.对象和类
对象是类的实例,有状态和行为
类是对象的模板,描述一类对象的行为和状态
4.java中的对象和类
(1)软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成
(2)类类似于对象构造函数,或用于创建对象的"蓝图
5.构造函数
Java 中的构造函数是一种用于初始化对象的特殊方法。在创建类的对象时调用构造函数,它可用于设置对象属性的初始值。构造函数名称必须与类名匹配,并且不能有返回类型
6.构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法
7.修饰符
(1)访问修饰符 - 控制访问级别
1>public 该类可由任何其他类访问
2>private 代码只能在声明的类中访问
3>default 该类只能由同一包中的类访问
4>protexted 代码可以在相同的包和子类中访问
(2)非访问修饰符 - 不控制访问级别,但提供其他功能
1>final 该类不能被其他类继承
2>abstract 该类不能用于创建对象
3>static 属性和方法属于类,而不是对象
8.创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
(1)声明:声明一个对象,包括对象名称和对象类型
(2)实例化:使用关键字 new 来创建一个对象
(3)初始化:使用 new 创建对象时,会调用构造方法初始化对象
9.继承
Java 中可以将属性和方法从一个类继承到另一个类。我们将"继承概念"分为两类:
(1)子类 (Subclass) - 子,从另一个类继承的类
(2)超类 (Superclass) - 父,被继承的类
要从类继承,请使用 extends关键字
例如:
class Vehicle {
protected String brand = "Ford";
public void honk() {
System.out.println("Tuut, tuut!");
}
}
class Car extends Vehicle {
private String modelName = "Mustang";
public static void main(String[] args) {
Car myCar = new Car();
myCar.honk();
System.out.println(myCar.brand + " " + myCar.modelName);
}
}
10.多态
(1)多态是同一个行为具有多个不同表现形式或形态的能力。继承允许我们从另一个类继承属性和方法。多态性使用这些方法来执行不同的任务,这允许我们以不同的方式执行单个操作
实例:
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");
}
}
(2)多态的三个必要条件
1>继承;
2>重写;
3>父类引用指向子类:Parent p = new Child();
(3)向上转型
子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口
(4)向下转型
向下转型是把父类对象转为子类对象
11.封装
在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
封装优点:
1> 良好的封装能够减少耦合
2> 类内部的结构可以自由修改
3> 可以对成员变量进行更精确的控制
4> 隐藏信息,实现细节,提高数据的安全性
12.包
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间
分类:
(1)内置包(来自Java API的包)
要使用库中的类或包,需要使用 import 关键字
语法;
import package.name.Class; // 导入 single 类
import package.name.*; // 导入整个包
(2)用户定义的包(创建自己的包)
要创建包,请使用 package 关键字
实例:
package mypack;
class MyPackageClass {
public static void main(String[] args) {
System.out.println("This is my package!");
}
}
13.import关键字
在Java中,import关键字用于导入其他类或包中定义的类型,以便在当前源文件中使用这些类型
import关键字用于引入其他包中的类、接口或静态成员,它允许你在代码中直接使用其他包中的类,而不需要完整地指定类的包名
import语句位于package语句之后
14.接口
interface 接口是一个完全"抽象类",用于将相关方法与空实体分组;要访问接口方法
接口必须由另一个具有 implements 关键字的类"实现"
接口方法的主体由"implement"类提供
实例
// 接口
interface Animal {
public void animalSound(); // 接口方法(没有主体)
public void sleep(); // 接口方法(没有主体)
}
class Pig implements Animal {
public void animalSound() {
// 这里提供了 animalSound() 的主体
System.out.println("The pig says: wee wee");
}
public void sleep() {
System.out.println("Zzz");
}
}
class MyMainClass {
public static void main(String[] args) {
Pig myPig = new Pig(); // 创建 Pig 对象
myPig.animalSound();
myPig.sleep();
}
}
二:问题聚合
1.java中可不可以多重继承?为什么?
(1)不可以多重继承;Java只能继承一个类,因为Java是面向对象语言,一个类可继承的属性不应该来自多个类,继承是类与类的关系,在Java中是对本身更高层次的抽象,而不是更多层次的抽象。
(2)不支持多重继承主要是避免在多重继承的场景下,当两个父类有相同的方法或属性时,子类如何确定使用哪一个父类的方法或属性的这种问题。Java可以通过实现多个接口来实现类的多重继承效果。接口是一种抽象类型,定义一组方法,但没有实现这些方法;一个类可以实现多个接口,并为其实现接口中定义的方法,通过这种方式,Java实现了类似于多重继承的功能。
2.子类在继承父类的同时,能不能出现同名不同类型的参数
子类在继承父类的同时,可以出现同名不同类型的参数。这是因为Java支持方法的重载(Overloading),即允许同一个方法名在不同情况下具有不同的参数列表。当子类定义了一个与父类中已有方法名相同的方法时,编译器会根据参数列表的差异来判断调用哪个方法。
例如,假设有一个父类Animal和一个子类Dog,Animal类中有一个名为"makeSound"的方法,而Dog类中也定义了一个名为"makeSound"的方法,但参数列表不同。在这种情况下,子类中的"makeSound"方法会覆盖父类中的同名方法。
3.在3.4中的实例,main方法中能不能创建对象:Dog d=(Dog) a;将a变量转换成Dog对象?
在给定的代码中,main方法中确实可以创建对象并进行类型转换。但是,根据代码的逻辑和结构,将a变量转换为Dog对象并不是一个合理的操作,因为a是一个Animal类型的引用,它可能指向Cat或Dog的实例。尝试将a转换为 Dog类型并赋值给d会导致编译时错误,因为类型不匹配。如果你想将a转换为Dog类型,你需要确保a确实指向一个Dog类型的实例。在给定的代码中,a被初始化为一个Cat类型的实例,因此将其转换为Dog类型是不正确的。
4.包名中的类能不能放在与包路径不同的文件路径中?
在Java中,包名和文件路径是相关联的。按照Java的规范,包名应该与文件系统路径保持一致。这意味着,如果你有一个包名com.example,那么该包下的所有类文件应该位于一个名为com.example的目录下。
5.面向对象特征主要包括以下四个方面:
(1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
(2)继承:子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
(3)封装:封装是指将客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行隐藏。封装最主要的功能在于能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
(4)多态:多态是指允许不同类的对象对同一消息做出相应,多态包括参数化多态和包含多态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。