封装
封装是 JAVA 面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内部结构。也就是说,如果我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。
1 package pojo.demo01; 2 3 public abstract class Pet { 4 private String name;//名字 5 private int health; //健康值 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) { 10 this.name = name; 11 } 12 public int getHealth() { 13 return health; 14 } 15 public void setHealth(int health) { 16 this.health = health; 17 } 18 19 //吃东西的方法 20 public abstract void eat(); 21 }
以下提供get(),set()方法和eat()吃东西方法,外部类去调用时只知道方法并不知道内部怎么实现的。
继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
1、继承是面向对象的三大特征之一,也是实现代码复用的重要手段。Java的继承具有单继承的特点,即只能继承自一个父类,每个子类只有一个直接父类,但是其父类又可以继承于另一个类,从而实现了子类可以间接继承多个父类,但其本质上划分仍然是一个父类和子类的关系。
2、Java的继承通过extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类(有的也称其为基类、超类),父类和子类的关系,是一种一般和特殊的关系。就像是水果和苹果的关系,苹果继承了水果,苹果是水果的子类,水果是苹果的父类,则苹果是一种特殊的水果。
3、Java使用extends作为继承的关键字,extends关键字在英文是扩展的意思,而不是继承。为什么国内把extends翻译成继承呢?除了与历史原因有关外,把extends翻译成为继承也是有其道理的:子类扩展父类,将可以获得父类的全部属性和方法,这与汉语中得继承(子辈从父辈那里获得一笔财富成为继承)具有很好的类似性。
值得指出的是:Java的子类不能获得父类的构造器。
class Animal { String name="animal"; int age; void move(){ System.out.println("animalmove"); } } classDog extends Animal{ String name="dog"; //隐藏了父类的name属性; float weight; //子类新增成员变量 void move(){ //覆盖了父类的方法move()
1 classSuperClass { 2 3 SuperClass() { 4 5 System.out.println("调用父类无参构造函数"); 6 7 } 8 9 SuperClass(int n) { 10 11 System.out.println("调用父类有参构造函数:" + n ); 12 13 } 14 15 } 16 17 classSubClass extends SuperClass{ 18 19 SubClass(int n) { 20 21 System.out.println("调用子类有参构造函数:" + n ); 22 23 } 24 25 SubClass(){ 26 27 super(200); 28 29 System.out.println("调用子类无参构造函数"); 30 31 } 32 33 } 34 35 publicclass InheritDemo2{ 36 37 public static void main(String arg[]) { 38 39 SubClass s1 = new SubClass(); 40 41 SubClass s2 = new SubClass(100); 42 43 } 44 45 }
super.move(); //用super调用父类的方法 System.out.println("Dog Move"); } } publicclass InheritDemo{ public static void main(String args[]){ Dog d=new Dog(); d.age=5; d.weight=6; System.out.println(d.name+" is"+d.age+" years old"); System.out.println("weight:"+d.weight); d.move(); } }
多态(Polymorphism)
多态性是指在继承关系中的父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各子类类中具有不同的含义。
Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态(Polymorphism)
class Animal2 { void eat(){ System.out.println("animal eat"); } } class Dog extends Animal2 { void eat(){ System.out.println("Dog eat bone"); } } class Cat extends Animal2 { void eat(){ System.out.println("Cat eat fish"); } } public class PloyDemo{ public static void main(String args[]){ Animal2 a; a=newAnimal2 (); //编译时类型和运行时类型完全一样,因此不存在多态 a.eat(); a=new Dog(); //下面编译时类型和运行时类型不一样,多态发生 a.eat(); a=new Cat(); //下面编译时类型和运行时类型不一样,多态发生 a.eat(); } }
————————————————
版权声明:本文为CSDN博主「冰可乐!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_48984694/article/details/125987177