-
该露的露,该藏的藏
- 程序设计要求**“高内聚,低耦合”**。高内聚就是类的内部数据 *** 作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用
-
封装(数据的隐藏)
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过 *** 作接口来访问,这称为信息隐藏
-
属性私有,get/set
-
package com.oop.demo04; public class Student { //属性私有 private String name; private int age; private int id; private char sex; //提供一些可以 *** 作这些属性的方法 // public 的get/set方法 // get:获得这个数据 public String getName() { return name; } public int getAge() { return age; } public int getId() { return id; } public char getSex() { return sex; } // set:给数据设置值 public void setName(String name) { this.name = name; } public void setAge(int age) { if(age<120 || age>0){ this.age = age; }else{ System.out.println("请不要用你的年龄开玩笑"); } } public void setId(int id) { this.id = id; } public void setSex(char sex) { this.sex = sex; } }
-
继承的本质是对某以批类的抽象,从而实现现实世界更好的建模
-
extends的意思是扩展。子类是父类的扩展
-
Java中类只有单继承,没有多继承。
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等
-
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
-
子类和父类之间,从意义上讲具有“is a”的关系
-
package com.oop.demo05; //继承 //Person 人 :父类 //在Java中,所有的类都直接或间接默认继承Object类 public class Person { private int money = 10_0000_0000; public void say(){ System.out.println("我爱你"); } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } }
-
package com.oop.demo05; //Student is 人 :子类 public class Student extends Person{ }
-
package com.oop.demo05; //Teacher is 人: 子类 public class Teacher extends Person{ }
-
package com.oop; import com.oop.demo03.Pet; import com.oop.demo05.Student; import com.oop.demo05.Teacher; public class Application { public static void main(String[] args) { Student student = new Student(); Teacher teacher = new Teacher(); student.say(); System.out.println(teacher.getMoney()); } }
-
object类
- 在Java中,所有的类都直接或间接的继承Object类
-
super
-
在父类中私有的东西无法被继承(private关键字)
-
package com.oop.demo05; //Person 人 :父类 public class Person { public Person(){ System.out.println("Person无参执行了") } protected String name = "王某某"; public void print(){ System.out.println("Person"); } }
-
package com.oop.demo05; //Student is 人 :子类 public class Student extends Person{ public Stydent(){ //隐藏代码 super();//在调用父类构造器的时候,super();一定在子类构造器的第一行 System.out.println("Student无参执行了"); } private String name = "李某某"; public void test(String name){ System.out.println(name);//王大海 System.out.println(this.name);//李某某 System.out.println(super.name);//王某某 } public void print(){ System.out.println("Student"); } public void test1(){ print();//Student this.print();//Student super.print();//Person } }
-
package com.oop; import com.oop.demo05.Student; public class Application { public static void main(String[] args) { Student student = new Student(); student.test("王大海"); student.test1(); } }
-
运行结果: Person无参执行了 Student无参执行了 王大海 李某某 王某某 Student Student Person
-
super注意点: 1. super调用父类的构造方法,必须在构造方法的第一个 2. super必须只能出现在子类的方法或者构造方法中 3. super和this不能同时调用构造方法 Vs this: 代表的对象不同: this: 本身调用这个对象 super: 代表父类对象的调用 前提: this: 没有继承也可以调用 super: 只能在继承条件下调用 构造方法: this(): 本类的构造 super():父类的构造
-
-
方法重写
-
package com.oop.demo05; package com.oop.demo05; //重写都是方法的重写,和属性无关 public class B { public class B{ public void test(){ public static void test() { System.out.println("B>=test()"); System.out.println("B>=test()"); } } } }
-
package com.oop.demo05; package com.oop.demo05; public class A extends B { public class A extends B { public void test(){ public void test(){ System.out.println("A>=test()"); System.out.println("A>=test()"); } } } }
-
package com.oop; import com.oop.demo05.A; import com.oop.demo05.B; import com.oop.demo05.Student; public class Application { public static void main(String[] args) { //静态方法和非静态方法区别很大 //静态方法:方法的调用只和左边:定义的数据类型有关 A a = new A(); a.test(); //父类的引用指向了子类 B b = new A(); B b = new A();//子类重写了父类的方法 b.test() } }
-
运行结果: A>=test() A>=test() A>=test() B>=test()
-
重写总结: 1.需要有集成方法,子类重写父类的方法 2.方法名必须相同 3.参数列表必须相同 4.修饰符:范围可以扩大,不可以缩小 public>protected>default>private 5.抛出的异常:范围可以缩小但不能扩大 重写:子类的方法和父类的要一致,方法体不同! 为什么需要重写: 1.父类的功能,子类不一定需要或不一定满足 2.alt+Insert:override
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)