标签:特征 print img src bsp 命名法 简化 初始化 pre
具有相同属性和方法的一系列对象的集合,是对对象的一个描述。类的内部包括属性和方法两个部分。
类是创建对象的一个模板。
class Dog{ //属性 private String name; private int age; private float height; //构造方法 public Dog() { } public Dog(String name, int age, float height) { super(); this.name = name; this.age = age; this.height = height; } //方法 public void eat() { System.out.println("这只狗会吃饭..."); } //Getter & Setter 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; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } }
一般情况下,所有属性设置为private(只能在本类进行访问)
属性是对对象特征的一个描述。在描述对象时,不需要对对象的所有特征都进行描述,只需用到什么就描述什么。
方法包括五部分:限定词+返回值类型+方法名+参数+方法体
方法在定义时的参数为形参,只起到占位作用。形参是一个局部变量,作用域仅仅限于方法体内有效,出了方法体,便被销毁。
方法在被调用的时候传入的参数称为实参,它的值被赋给形参,通过形参参与方法体中的运算。这种值的传递是单向的,只有从实参传递给形参,方法执行完毕之后,形参的值并不会被传递给实参。
public class Calc{ //被重载的方法 public int add(int num1, int num2) { return num1+num2; } //参数列表不同,方法名相同 public int add(int num1, int num2, int num3) { return add(num1, num2)+num3; } //参数名与返回值都不同,方法名相同 public float add(float num1, float num2) { return num1+num2; } }
每个类都有自己的构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认的无参构造方法。
构造方法的几个特点:
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
对象是类所描述的一个实体,是类的一个实例化。
示例:
//调用无参构造方法实例化对象 Dog dog1 = new Dog(); //调用带参构造方法实例化对象,同时对对象进行初始化 Dog dog2 = new Dog("大黄", 2, 12.9f);
由于对象的属性被设置为私有的,所以只能通过set和get方法来访问。
通过已创建的对象来访问成员变量和成员方法,如下所示:
Dog dog2 = new Dog("大黄", 2, 12.9f); System.out.println("狗的名字是:"+dog2.getName()); System.out.println("狗的年龄是:"+dog2.getAge()+"岁"); System.out.println("狗的体重是:"+dog2.getHeight()+"kg");
打印结果如下:
狗的名字是:大黄 狗的年龄是:2岁 狗的体重是:12.9kg
设计的原则:关注所需要的属性和方法
一般情况下,将属性值全部设置为private,通过set和get方法来对属性进行访问:
public class Person{ private String name; private int age; ? public int getAge(){ return age; } ? public String getName(){ return name; } ? public void setAge(int age){ this.age = age; } ? public void setName(String name){ this.name = name; } }
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法实现对隐藏信息的访问和操作。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。同时,子类可以在父类的基础上进行扩展,加入自己独有的属性和方法。
class Animals{ private String name; //父类构造方法 public Animals(String name) { this.name = name; } public void eat() { System.out.println("动物吃东西"); } } class Dogs extends Animals{ //子类构造方法。父类没有无参构造方法,子类实例化时必须调用父类构造方法 public Dogs(String name) { super(name); } public void run() { System.out.println("狗会跑"); } }
上面例子中,Animals为父类,而Dogs作为子类。
Animals中只有一个Animals(String name)的构造方法。子类构造方法中,如果没有使用super来调用父类构造方法,编译器会默认调用一个super()的方法,但由于父类中不存在这个构造方法,所以编译器会报错。此时要求我们调用父类唯一的带参构造方法。
子类构造方法中必须且只能一次地调用父类的构造方法,并且位置是在构造方法所有操作之前。
run方法是Dogs类在Animals类的基础上所进行的扩展,eat方法将在Dogs类中被继承。
继承后对Dogs对象的使用示例:
Dogs dogs = new Dogs("大黄"); dogs.eat(); dogs.run();
打印结果如下:
动物吃东西
狗会跑
子类中可以对从父类继承的方法进行重写(Alt+Shift+s, v),重写后子类对象在调用时会优先调用子类中被重写的方法
class Dogs extends Animals{ public Dogs(String name) { super(name); } //对父类方法进行重写,通过@verride标识 @Override public void eat() { System.out.println("狗会吃骨头"); } }
这里调用dogs.eat()方法时,会打印“狗会吃骨头”,而不是“动物吃东西”。
super代表的是父类,this代表的是本类
class Dogs extends Animals{ public Dogs(String name) { super(name); } @Override public void eat() { System.out.println("狗会吃骨头"); } public void animalEat() { super.eat(); this.eat(); } }
调用animalEat方法后打印的结果为:
动物吃东西
狗会吃骨头
final,意为最后的,最终的。
B extends A : 从逻辑上来说,是 “B is a A” 的关系。例如狗继承自动物,说明狗是一种动物;衣服继承自商品,说明衣服是一种商品。
组合:是一种 “A has B” 的关系。在一个类中,可以用别的对象来作为自己的属性。例如人有名字,而这个名字本身是一个String类型的对象,我们可以同过它来描述一个人。
所为多态,即多种形态。
多态是同一个行为具有多个不同表现形式或形态的能力。
比如说两台打印机,一台为黑白打印机,一台为彩色打印机。当我们使用黑白打印机时,它将给我们打印黑白的材料,而使用彩色打印机时打印的却是彩色的。
abstract class Printer { //父类的打印方法 public abstract void print(); } class BWPrinter extends Printer { @Override public void print() { System.out.println("打印了一份黑白材料"); } } class ColorfulPrinter extends Printer { @Override public void print() { System.out.println("打印了一份彩色材料"); } } public class Main { public static void print(Printer printer) { printer.print(); } public static void main(String[] args) { BWPrinter bwPrinter = new BWPrinter(); ColorfulPrinter colorfulPrinter = new ColorfulPrinter(); //使用黑白打印机进行打印 print(bwPrinter); //使用彩色打印机进行打印 print(colorfulPrinter); } }
打印结果为:
打印了一份黑白材料
打印了一份彩色材料
标签:特征 print img src bsp 命名法 简化 初始化 pre
原文地址:https://www.cnblogs.com/JuanF/p/9271439.html