首页 > 其他分享 >面向对象(OOP)08~17

面向对象(OOP)08~17

时间:2023-11-01 11:12:15浏览次数:36  
标签:name 17 子类 08 public OOP 父类 void String

面向对象(OOP)08~17

1.封装

​ "高内聚、低耦合",内部细节自己完成;仅暴露少量方法给外部使用。

属性私有,get/set

// private : 私有
public class Student {
	// 属性私有
    private String name; // 名字
    private int id;  //学号
    private char sex; //性别
    // get 获取数据
    public String getName(){
        return this.name
    }
    // set 设定数据
    public void setName(name){
        this.name = name;
    }
}

2.继承(对类的抽象)

​ 类之间有父子关系,通过extends来继承,也可理解为子类是父类的扩展。

​ 继承有两个成员,一个子类(派生类),一个父类(基类);

​ 2.1.子类可以继承父类的所有的方法;

​ 2.2.父类私有的无法继承;

​ 2.3.Java中所有的类都继承Object类;

3.Super详解(与this相似,this指当前,Super指父类)

public class Student extends Person{
    public Student(){
        // 隐藏代码  super()  //会先执行父类的构造函数
        System.out.println("student 执行了")
    }
}

​ 1.super调用父类的构造方法,必须在构造方法第一行

​ 2.super只能出现在子类的方法或者构造方法中

​ 3.super和this不能同时在构造方法中

4.方法重写(子类中同名同参方法可以替代父类中的同名同参方法)

​ 4.1 父类的引用可以指向子类,方法重写后,调用的是子类的方法

​ 4.2 重写只于非静态的方法、公有有关

​ 4.3 重写只存在于子父类中

​ 4.4 重写的原因:子类的方法和父类需求不一致

5.多态(同一个方法根据发送对象的不同而采取多种不同的行为方式)

​ 5.1 可以实现动态编译

​ 5.2 一个对象的实际类型是确定的,但父类的引用可指向子类,引用类型可以有很多。

// 对象执行的那些方法,主要看左边的类型
// student 能调用自己和父类的方法
Student s1 = new Student();
// 父类可以指向子类,但是不能调用子类的方法
Person  s2 = new Student();
Object  s3 = new Student();

​ PS: static(属于类,不属于实例),final,private 都没有多态

6.instanceof 和 引用类型转换

​ 1.instanceof 可判断类之间又没有父子关系;

System.out.println(x instanceof y);  //x,y 之间是否父子关系

​ 2.引用类型强制转换 父高子低 类型可以由低到高

Person p = new student();

​ PS:父类转成子类,可能会丢失方法;

7.static 关键字详解

​ 1.静态属性(变量):类变量,可以通过类直接访问

​ 2.静态方法:类方法,可以通过类直接访问,非静态方法可以直接调用静态方法

​ 3.静态代码块:加载初始化数据,在构造函数之前,永久只执行一次

public class Person {
	{
		//匿名代码块
	}
	static {
		//静态代码块
	}
	public person{
		// 构造函数块
	}
}

// 静态->匿名->构造函数

​ 4.静态导入包

import static java.util.Math.roandom.

8.抽象类

​ 1.通过abstract来修饰类

// abstract
public abstract class Action{
    // 抽象方法,只有约束,不用实现
    public abstract void doSomething();
}

​ PS:不能new出来,只是一个约束;抽象类可以写抽象方法;抽象的方法必须在抽象类里

9.接口的定义和实现

​ 1.关键字interface,只有约束

public interface UserService {

    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}


public class UserSerivceImpl implements UserService{

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }
}

​ 2.可以实现多继承

​ 3.接口的属性就是常量

​ PS:一个好的架构师,就会抽象完成整个项目的接口定义

10.N中内部类(在类的内部定义一个类)

​ 1.类中内部类

public class Outer {

    private int id;
    public void out(){
        System.out.println("outer function");
    }

    public class Inner{
        public void in(){
            System.out.println("Inner function");
        }

        // 内部类可以获取外部类的私有属性
        public void getID(){
            System.out.println(id);
        }
    }
}

Outer outer = new Outer();

​ 2.方法内部类

public void method(){
	class person{
		//方法内部类
	}
}

​ 3.匿名内部类

new Apple.eat()

标签:name,17,子类,08,public,OOP,父类,void,String
From: https://www.cnblogs.com/rushintocloud/p/17802575.html

相关文章

  • [17章+电子书]C#速成指南-从入门到进阶,实战WPF与Unity3D开发
    点击下载:[17章+电子书]C#速成指南-从入门到进阶,实战WPF与Unity3D开发  提取码:a3s5 《C#速成指南--从入门到进阶,实战WPF与Unity3D开发》完整讲解了C#语言的核心知识和高阶编程技巧,并结合WPF客户管理系统和Unity3D切水果游戏两大实战项目,帮你实现技术的精通,完成从Zero到Hero的蜕变......
  • CF708C Centroids
    对于一个不是重心的点\(u\),它必定有一棵子树\(T\)包含所有重心(如果有两个重心则它们必定相邻),显然\(|T|>\lfloor\frac{n}{2}\rfloor\),这阻碍了它成为重心。贪心地想,我们要在\(T\)中找出一棵子树\(S\)使得\(|S|\leq\lfloor\frac{n}{2}\rfloor\)且\(|S|\)尽可能大,然后将......
  • CF1764D Doremy's Pegging Game 组合数学
    CF1764DDoremy'sPeggingGame你怎么连简单题也不会?考虑满足条件当且仅当有连续的n/2向下取整段被删除。考虑最终状态一定是一次删除联通了两个连续段,然后结束。我们枚举这个连续段的长度i。最后一个删除的位置有n/2下取整*2-i种方案,设另外删除了j种,则另外删除的方案......
  • 解题报告 P3704 [SDOI2017] 数字表格
    P3704[SDOI2017]数字表格经典莫反。题目要求:\[\prod_{i=1}^n\prod_{j=1}^mfib(\gcd(i,j))\]不妨令\(n<m\)。套路地,我们设\(\gcd(i,j)=d\),然后枚举\(d\):\[\begin{aligned}&\quad\prod_{d=1}^n\prod_{i=1}^n\prod_{j=1}^mfib(d)^{[\gcd(i,j)==d]}\\&=\pr......
  • CF1707 题解
    CF1707题解A考场上1h才出思路...弱智了。我们将参加大于当前智商的行为叫做“摆烂”。我们考虑如果现在摆一次,将来某一次不摆,那么现在不摆,将来那次开摆,中间过程的智商会加1。更优。所以一定一摆就摆到底。而且一定会摆到最后一个。所以我们二分从什么时候开摆,看是否能摆到......
  • P3217 [HNOI2011] 数矩形
    P3217[HNOI2011]数矩形题解前言提交记录本题其实并不是非常难想,那么为什么本蒟蒻还交了那么多发呢?cal函数求平方的时候传值未开longlong,我谔谔。正文题面省流:给定$n$个点求最大举行的面积,矩形的边可以不与坐标系垂直。如果每次枚举矩形的四个点的话,$O\left(n^4\rig......
  • #17
    [AGC027E]ABBreviate题面令\(a\)为\(1\),\(b\)为\(2\),一次操作后,整个串的字符和模三的结果是不会改变的。令\(P(a)\)表示\(a\)的字符和模三的结果,并不是所有\(P(a)=P(b)(b\text{为字符a或b})\)的\(a\)串都能成功变为\(b\),可以证明的是可以转变的条件是\(a\)......
  • Databend 开源周报第 117 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。特性预览:只读式ATTACHTABLE为了少数几条大规模查询,而......
  • Databend 开源周报第 117 期
    Databend是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn。What'sOnInDatabend探索Databend本周新进展,遇到更贴近你心意的Databend。特性预览:只读式ATTACHTABLE为了少数几条大规模查询,......
  • 【算法题】2817. 限制条件下元素之间的最小绝对差
    题目:给你一个下标从0开始的整数数组nums和一个整数x。请你找到数组中下标距离至少为x的两个元素的差值绝对值的最小值。换言之,请你找到两个下标i和j,满足abs(i-j)>=x且abs(nums[i]-nums[j])的值最小。请你返回一个整数,表示下标距离至少为x的两个元素之......