JavaSE面向对象

面向对象练习

实验要求

1、什么是多态,谈谈你对多态的理解,多态情况下方法执行

2、一个类可以有几个父类,一个父类可以有几个子类,子类能获取父类的构造方法吗?

3、重写重载的区别

4、super关键字 与this关键字

5、抽象类和抽象方法

6、final关键字

7、多态是编译时行为还是运行时行为?【运行时行为】

public class Test { 
	public static void main(String[] args) { 
		Sun sun = new Sun(); 
		System.out.println(sun.num); 
		sun.print(); 
		Father father = (Father)sun;
		System.out.println(father.num); 
		father.print(); 
	}
}
class Father{ 
	int num=100; 
	public void print(){ 
		System.out.println(this.num);
	} 
}
class Sun extends Father{ 
	int num=200; 
	public void print(){ 
		System.out.println(this.num);
	}
}

8、编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。

9、父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等,编写displayGeometricObject方法显示对象的面积。

10、编写立体图形类,SolidFigure,必须有属性高,定义圆柱体Cylinde,长方体Rectangular。实现计算面机getArea和体积的方法getVolume。

11、简述接口的特点以及接口与抽象类的区别


实验过程

1、什么是多态,谈谈你对多态的理解,多态情况下方法执行
  同一种事物,由于条件不同,所产生的结果也不相同,产生在继承情况下,父类的实例指向子类的对象

2、一个类可以有几个父类,一个父类可以有几个子类,子类能获取父类的构造方法吗?
  java中类只能进行单继承,但一个类可以有多个子类,子类可以通过super关键字来调用父类的方法及成员变量,同时也可以调用构造方法

3、重写重载的区别
  重写:发生在继承关系中的,子类重写父类的方法。方法名相同,参数列表相同,访问修饰符不能比父类的严格。返回值类型相同或是父类方法返回值类型的子类。
  重载:发生在同一类中,方法名相同,参数列表不同,与访问修饰符和返回值类型无关。

4、super关键字与this关键字
  super关键字产生在继承关系中,用于调用父类的成员变量及方法。
  this关键字则用来调用本类的属性和方法

5、抽象类和抽象方法
  抽象类不可以被实例化,必须要用abstract关键字来修饰类,当子类继承的父类为抽象类时,需要实现父类的抽象方法才能被实例化,否则该类还是一个抽象类。
  抽象方法也需要用abstract关键字来修饰,抽象方法不能有方法体,抽象方法必须在抽象类里。

6、final关键字
  final可以修饰类、方法、属性,final修饰的属性是常量,只可赋初值,不可改变;final修饰的方法可以被继承但是不能被重写;final修饰的类不能被继承。

7、多态是编译时行为还是运行时行为?【运行时行为】
  因为在运行时根据代码无法确定实例化的对象是谁,只有实例化后才可以看出。

public class Test { 
	public static void main(String[] args) { 
		Son son = new Son(); 
		System.out.println(son.num); 
		son.print(); 
		Father father = (Father)son;
		System.out.println(father.num); 
		father.print(); 
	}
}
class Father{ 
	int num=100; 
	public void print(){ 
		System.out.println(this.num);
	} 
}
class Son extends Father{ 
	int num=200; 
	public void print(){ 
		System.out.println(this.num);
	}
}

200
200
100
200

8、编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等。

在这里插入图片描述
在这里插入图片描述
此时equals()比较为false,因为equals方法比较时用“==”来比较,“==”会比较内存地址,内存地址一样时才返回true
在这里插入图片描述
重写equals()方法,当对象的属性一致时,认定这两个对象相同。

9、父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等,编写displayGeometricObject方法显示对象的面积。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、编写立体图形类,SolidFigure,必须有属性高,定义圆柱体Cylinde,长方体Rectangular。实现计算面积getArea和体积的方法getVolume。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
11、简述接口的特点以及接口与抽象类的区别

  接口使用interface关键字来进行修饰,接口中所有属性和方法默认被public修饰,接口只能定义常量不能定义变量且常量都是静态常量,接口不能被实例化,接口之间的继承用extends来实现,类实现接口时用implements关键字来实现接口且实现接口时需要实现借口里的所有方法

### JavaSE 面向对象编程概念详解 #### 与对象的概念 面向对象编程的核心在于模拟现实世界中的实体及其行为。在Java中,通过定义``(Class)来描述具有共同属性行为的对象模板[^1]。 - **(Class)** 是创建对象(Object)的蓝图或原型,它包含了数据成员(字段/属性)以及成员函数(方法),用于表示特定型的实例化个体。 - **对象(Object)** 则是基于此的具体存在形式;每一个对象都是某个具体的一个实例。当声明并初始化了一个新对象时,实际上就是在内存里分配了一块空间给这个新的实体,并赋予其初始状态。 ```java // 定义一个简单的Person public class Person { String name; // 成员变量 (属性) public void sayHello() { // 方法 System.out.println("Hello, my name is " + this.name); } } ``` #### 变量的作用域 了解不同种的变量对于编写清晰可维护代码至关重要。主要分为两- **成员变量(属性)**: 属于整个而非单个方法,在内部任何地方都可以访问到它们; - **局部变量**: 仅限于所在的方法体内有效,通常作为临时存储使用,比如循环计数器或是计算过程中的中间结果等[^2]。 ```java public class Example { int memberVariable = 0; public void exampleMethod(){ int localVariable = 1; // 此处可以访问memberVariable localVariable } // 外部无法直接访问localVariable } ``` #### 封装、继承与多态性 这是面向对象程序设计中最基本也最重要的三个特征[^3]: - **封装**(Encapsulation): 把对象的状态信息隐藏起来,只暴露有限的操作接口供外部调用者交互。这有助于保护数据的安全性一致性,同时也简化了系统的复杂度管理。 - **继承**(Inheritance): 子能够自动获得父所有的公共属性服务,从而实现代码重用的目的。需要注意的是,虽然Java不支持多个直接基的同时派生,但是可以通过接口的形式间接达成似效果。 - **多态(Polymorphism)**: 同一操作作用于不同的对象上会产生各异的结果表现形式。这种灵活性允许开发者写出更加通用灵活的应用逻辑结构。 ```java class Animal{ public void makeSound(){} } class Dog extends Animal{ @Override public void makeSound(){System.out.println("Bark");} } class Cat extends Animal{ @Override public void makeSound(){System.out.println("Meow");} } Animal dog=new Dog(); dog.makeSound(); // 输出 Bark Animal cat=new Cat(); cat.makeSound(); // 输出 Meow ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值