封装
- 该露的露,该藏的藏
- 我们程序设计要追求,“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成。不允许外部干涉;低耦合:仅暴漏少量的方法给外部使用。
- 封装(数据的隐藏)
- 通常,应禁止访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
- 记住这句话就够了:属性私有,get/set
package com.baidu.oop.demo04;
public class Student {
private String name;
private int id;
private char sex;
private int age;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>120 || age<0) {
this.age = 3;
}else {
this.age = age;
}
}
}
import com.baidu.oop.demo04.Student;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("韩锁");
System.out.println(s1.getName());
s1.setAge(-1);
System.out.println(s1.getAge());
}
}
继承
- 继承的本质是对某一批类的抽象。从而实现对现实世界更好建模
- extents的意思是“扩展”。子类是弗雷的扩展。
- Java中类只有单继承,没有多继承!(一个儿子只能有一个爸爸,但是一个爸爸可以有多个儿子)
- 继承是类和类之间的一种关系。除此以外,类和类之间的关系还有依赖,组合,聚合等。
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends类表示。
- 子类和父类之间,从意义上讲应该具有“is a”的关系
- object类
- super
- 方法重写
package com.baidu.oop.demo05;
public class Person {
public Person() {
System.out.println("Person无参执行了");
}
protected String name = "轻狂书生";
public void print(){
System.out.println("Person");
}
}
package com.baidu.oop.demo05;
public class Teacher extends Person{
}
package com.baidu.oop.demo05;
public class Student extends Person{
public Student(){
super();
System.out.println("Student无参构造执行了");
}
private String name = "韩锁";
public void print(){
System.out.println("Student");
}
public void test1(){
print();
this.print();
super.print();
}
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
package com.baidu.oop.demo05;
public class Application {
public static void main(String[] args) {
Student student = new Student();
}
}
public static void main(String[] args) {
A a = new A();
a.test();
B b = new A();
b.test();
}
多态
- 动态编译:类型:可扩展性
- 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的实际类型是确定的,但可以只想对象的引用的类型有很多(父类,有关系的类)
- 多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用只想子类对象
- 注意:多态是方法的多态,属性没有多态性
- instanceof (类型转换) ~ 引用类型,判断一个对象是什么类型~
package com.baidu.oop;
import com.baidu.oop.demo06.Person;
import com.baidu.oop.demo06.Student;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
Person s2 = new Student();
Object s3 = new Student();
((Student)s2).eat();
}
}
package com.baidu.oop.demo06;
public class Student extends Person{
@Override
public void run() {
System.out.println("son");
}
public void eat(){
System.out.println("eat");
}
}
package com.baidu.oop.demo06;
public class Person {
public void run() {
System.out.println("run");
}
}
package com.baidu.oop;
import com.baidu.oop.demo06.Person;
import com.baidu.oop.demo06.Student;
import com.baidu.oop.demo06.Teacher;
public class Application {
public static void main(String[] args) {
Object object = new Student();
System.out.println(object instanceof Student);
System.out.println(object instanceof Person);
System.out.println(object instanceof Object);
System.out.println(object instanceof Teacher);
System.out.println(object instanceof String);
System.out.println("--------------------------------------------");
Person person = new Student();
System.out.println(person instanceof Student);
System.out.println(person instanceof Person);
System.out.println(person instanceof Object);
System.out.println(person instanceof Teacher);
Student student = new Student();
System.out.println("--------------------------------------------");
System.out.println(student instanceof Student);
System.out.println(student instanceof Person);
System.out.println(student instanceof Object);
}
}
import com.baidu.oop.demo06.Person;
import com.baidu.oop.demo06.Student;
public class Application {
public static void main(String[] args) {
Person obj = new Student();
Student student = (Student)obj;
student.go();
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器