封装 Encapsulation
该露的露、该藏的藏:程序设计追求“高内聚、低耦合”
高内聚:是指类的内部数据 *** 作细节自己完成,不允许外部干涉低耦合:尽量暴露少量方法给外部使用 封装(数据的隐藏)
信息隐藏:通常,应禁止直接访问一个对象中数据的实际表示,而应通过 *** 作接口来访问 记住这句话就够了:属性私有,get/set
public class Application { public static void main(String[] args) { Student student01 = new Student(); student01.setName("lding"); System.out.println(student01.getName()); } } //类 private 私有 //封装大多是对属性来讲的:属性私有 public class Student { //属性私有:private属性,只能本类才能访问,其他类都访问不了 private String name; //姓名:name private int id; //学号:id private char sex; //性别:sex //对外提供属性的公共访问方法! //提供一些public的get/set方法,用于取值/赋值 //get:获取数据的值 public String getName() { return this.name; } // set:设置数据的值 public void setName(String name) { this.name = name; } }
封装的意义
提高程序的安全性,保护数据隐藏代码细节,可以在set中进行代码处理统一接口(get/set)系统的可维护性增加了,内部的结构可以自由修改
方法的重载:如println();方法,有好多个方法重载!
9.继承—OOP特征之二
继承extends
继承是Java面向对象编程技术的基石,因为它允许创建分等级层次的类继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模extends的意思是“扩展”,子类是父类的扩展继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法。继承需要符合的关系是:is-a,父类更通用,子类更具体
Java中类只有单继承,不支持多继承!但支持多重继承!
单继承就是一个子类只能继承一个父类多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类多继承就是:一个子类同时继承多个父类(Java是不支持的!!!)
继承是类跟类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
Java的访问控制修饰符:
default:默认,可以不写。在同一包内可见,不使用任何修饰符,使用对象:类、接口、变量、方法public:对所有类可见。使用对象:类、接口、变量、方法private:在同一类内可见。使用对象:变量、方法protected:对同一包内的类和所有子类可见。使用对象:变量、方法
package com.oop.demo09; //Person 人: 父类,基类 //Java中,所有的类默认都直接或间接继承自Object类 public class Person { //父类的属性:money public int money = 10_0000_0000; //父类的方法:say() public void say() { System.out.println("say something"); } } //快捷键:ctrl+h,打开继承体系
package com.oop.demo09; //Student 学生 is Person :派生类,子类 public class Student extends Person { public static void main(String[] args) { Student student = new Student(); student.say(); //继承自父类的方法say() System.out.println(student.money); //继承自父类的属性 } }
package com.oop.demo09; //Teacher 老师 is Person:派生类,子类 public class Teacher extends Person{ }10.Super详解:重点理解
super需要注意的地方
super调用父类的构造方法,必须在构造方法的第一行super必须只能出现在子类的方法或者构造方法中!super和this不能同时调用构造方法!
this与super的对比
代表的对象不同:
this: 本身调用者这个对象super:代表父类对象的应用 前提
this:没有继承也可以使用super:只能在继承条件才可以使用 构造方法
this():本类的构造super():父类的构造
//Person 人: 父类,基类 //Java中,所有的类默认都直接或间接继承自Object类 public class Person { protected String name = "lding"; public void print(){ System.out.println("Person"); } public Person() { System.out.println("Person无参构造执行了"); } } //快捷键:ctrl+h,打开继承体系
//Student 学生 is Person :派生类,子类 public class Student extends Person { public Student() { 隐藏代码:调用了父类的无参构造器 //super(); //显式调用父类的构造器时,必须要在子类的第一行 System.out.println("Student无参构造执行了"); } private String name = "xding"; @Override //方法重写 public void print(){ System.out.println("Student"); } public void test(String name){ System.out.println(name); //参数传递过来的name System.out.println(this.name); //本类的name System.out.println(super.name); //父类的name print(); //本类的方法print() this.print(); //本类的方法print() super.print(); //父类的方法print() } }
public class Application { public static void main(String[] args) { Student student = new Student(); student.test("xgao"); } }
11.方法重写:重点理解
重写都是指方法的重写,以属性无关
static静态方法,与调用
public class Animal { public static void test(){ //此处使用static定义静态方法 System.out.println("Animal=>test()"); } }
//继承 public class Cat extends Animal{ public static void test(){ //此处使用static定义静态方法 System.out.println("Cat=>test()"); } }
public class Application { public static void main(String[] args) { //静态方法的调用只与定义类实例的类有关 Cat a = new Cat(); Cat.test(); //此处不可以使用a.test(); 不应该通过类实例访问静态成员 //父类的引用指向了子类 Animal b = new Cat(); Animal.test(); //此处不可以使用b.test(); 不应该通过类实例访问静态成员 } } 输出结果: Cat=>test() Animal=>test()
非静态方法的重写,与调用
public class Animal { public void test(){ System.out.println("Animal=>test()"); } }
//继承 public class Cat extends Animal{ @Override //注解:重写,有功能的注解 public void test(){ System.out.println("Cat=>test()"); } }
public class Application { public static void main(String[] args) { Cat a = new Cat(); a.test(); //父类的引用指向了子类 Animal b = new Cat(); //子类Cat重写了父类Animal的方法 b.test(); } } 输出结果: Cat=>test() Cat=>test()
重写小结:需要有继承关系,子类重写父类的方法
方法名必须相同参数列表必须相同修饰符:范围可以扩大但不能缩小 private < default < protected < public抛出的异常:范围可以被缩小但不能扩大。
重写:子类的方法和父类的必须一致,只是方法体不同!
为什么需要重写?
父类的功能,子类不一定需要,或者不一定满足
------------------------------“笔记整理自跟着《狂神说Java》”----------------------------------
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)