标签:cte person 类类型 总结 public min 执行 多态 创建
1、面向对象编程是什么面向对象编程(Object Oriented Programming,故常称OOP)并非Java独有,而是一种编程的思想,Java、C++、Python均有对其实现。其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的,任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
优点:易于维护与扩展,代码复用性高。由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活多变。
缺点:CPU开销大、占据资源多
封装:隐藏对象的属性和实现细节,仅保留一些对外接口;
继承:子类可以继承父类的属性和方法;
多态:同一个行为具有多个不同表现形式或形态的能力。
使用访问权限修饰符来实现对属性和方法的控制,包括private:仅限本类可以访问;default(默认权限):仅限本包可以访问;protected:仅限包内和继承的子类可以访问;public:均可访问。
我们在定义一个对象类时,通常对属性进行隐藏,提供公共的set、get方法进行访问。
/**
* @author RuiMing Lin
* @date 2020-03-05 16:01
*/
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() { return age; }
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name=‘" + name + ‘\‘‘ +
", age=" + age +
‘}‘;
}
}
继承可以使子类获得父类的所有非私有属性和方法,减少了代码的复用。继承可以使对象层次化,类型比较明确。
/**
* @author RuiMing Lin
* @date 2020-03-05 18:18
*/
public class Demo {
public static void main(String[] args) {
Son s = new Son("小明",23);
s.eat(); //从父类继承的方法
s.sleep(); //重新父类的方法
s.study(); //子类自己定义的方法
}
}
class Father{
String name;
int age;
public Father(String name, int age) {
this.name = name;
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("父亲睡觉");
}
}
class Son extends Father{
public Son(String name, int age) {
super(name, age);
}
@Override
public void sleep(){
System.out.println("儿子睡觉");
}
public void study(){
System.out.println("儿子学习");
}
}
public abstract class Animal {
public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
}
public class Test {
public static void main(String[] args) {
// 多态形式,创建对象
Cat c = new Cat();
Dog d = new Dog();
// 调用showCatEat
showCatEat(c);
// 调用showDogEat
showDogEat(d);
showAnimalEat(c);
showAnimalEat(d);
}
public static void showCatEat (Cat c){
c.eat();
}
public static void showDogEat (Dog d){
d.eat();
}
public static void showAnimalEat (Animal a){
a.eat();
}
}
由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,可以把Cat对象和Dog对象传递给方法。当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat、showDogEat方法一致, 所以showAnimalEat完全可以替代以上两方法。不仅仅是替代,在扩展性方面,无论之后再多的子类出现,我们都不需要编写showXxxEat方法了,直接使用 showAnimalEat都可以完成。 所以,多态的好处,体现在可以使程序编写的更简单,并有良好的扩展。
编译期若是父类(父接口)拥有该方法或类,则使用的IDE不会报错;运行期则看具体的类型,若是该类该方法或类,则使用的IDE不会报错。
- 成员变量:编译期看左边,运行期看左边;
- 静态方法:编译期看左边,运行期看左边;
- 非静态方法:编译期看左边,运行期看右边。
面向对象编程思想不同于面向过程编程,它的使用更加的严格与规范。Java的面向对象编程更是有许多规范,需要对Java学习的更加深入才会对它更好的理解。
有错误的地方敬请指出,欢迎大家评论区或者私信交流!每日持续更新Java、Python、大数据技术,请大家多多关注!
标签:cte person 类类型 总结 public min 执行 多态 创建
原文地址:https://blog.51cto.com/14065757/2482335