1.继承的概述

继承是多态的前提

继承主要解决的问题是共性抽取

2、继承的格式

在继承的关系中,子类可以当做父类看待

代码复用的效果

  1. package cn.itcast.day09.demo01;
  2. // 定义一个父类:员工
  3. public class Employee {
  4. public void method() {
  5. System.out.println("方法执行!");
  6. }
  7. }
  1. package cn.itcast.day09.demo01;
  2. // 定义了一个员工的子类:讲师
  3. public class Teacher extends Employee {
  4. }
  1. package cn.itcast.day09.demo01;
  2. // 定义了员工的另一个子类:助教
  3. public class Assistant extends Employee {
  4. }
  1. package cn.itcast.day09.demo01;
  2. /*
  3. 在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。
  4. 例如父类是员工,子类是讲师,那么“讲师就是一个员工”。关系:is-a。
  5. 定义父类的格式:(一个普通的类定义)
  6. public class 父类名称 {
  7. // ...
  8. }
  9. 定义子类的格式:
  10. public class 子类名称 extends 父类名称 {
  11. // ...
  12. }
  13. */
  14. public class Demo01Extends {
  15. public static void main(String[] args) {
  16. // 创建了一个子类对象
  17. Teacher teacher = new Teacher();
  18. // Teacher类当中虽然什么都没写,但是会继承来自父类的method方法。
  19. teacher.method();
  20. // 创建另一个子类助教的对象
  21. Assistant assistant = new Assistant();
  22. assistant.method();
  23. }
  24. }

3、继承中的成员变量的访问特点

父亲不知道儿子的内容

儿子知道父亲的内容

父类定义的方法属于父类,子类可以继承

属于是定义在哪儿的意思

  1. package cn.itcast.day09.demo02;
  2. /*
  3. 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
  4. 直接通过子类对象访问成员变量:
  5. 等号左边是谁,就优先用谁,没有则向上找。
  6. 间接通过成员方法访问成员变量:
  7. 该方法属于谁,就优先用谁,没有则向上找。
  8. */
  9. public class Demo01ExtendsField {
  10. public static void main(String[] args) {
  11. Fu fu = new Fu(); // 创建父类对象
  12. System.out.println(fu.numFu); // 只能使用父类的东西,没有任何子类内容
  13. System.out.println("===========");
  14. Zi zi = new Zi();
  15. System.out.println(zi.numFu); // 10
  16. System.out.println(zi.numZi); // 20
  17. System.out.println("===========");
  18. // 等号左边是谁,就优先用谁
  19. System.out.println(zi.num); // 优先子类,200
  20. // System.out.println(zi.abc); // 到处都没有,编译报错!
  21. System.out.println("===========");
  22. // 这个方法是子类的,优先用子类的,没有再向上找
  23. zi.methodZi(); // 200
  24. // 这个方法是在父类当中定义的,
  25. zi.methodFu(); // 100
  26. }
  27. }
  1. package cn.itcast.day09.demo02;
  2. public class Fu {
  3. int numFu = 10;
  4. int num = 100;
  5. public void methodFu() {
  6. // 使用的是本类当中的,不会向下找子类的
  7. System.out.println(num);
  8. }
  9. }
  1. package cn.itcast.day09.demo02;
  2. public class Zi extends Fu {
  3. int numZi = 20;
  4. int num = 200;
  5. public void methodZi() {
  6. // 因为本类当中有num,所以这里用的是本类的num
  7. System.out.println(num);
  8. }
  9. }

4、区分子类方法中的重名的三种方法

super

  1. package cn.itcast.day09.demo03;
  2. /*
  3. 局部变量: 直接写成员变量名
  4. 本类的成员变量: this.成员变量名
  5. 父类的成员变量: super.成员变量名
  6. */
  7. public class Demo01ExtendsField {
  8. public static void main(String[] args) {
  9. Zi zi = new Zi();
  10. zi.method();
  11. }
  12. }
  1. package cn.itcast.day09.demo03;
  2. public class Zi extends Fu {
  3. int num = 20;
  4. public void method() {
  5. int num = 30;
  6. System.out.println(num); // 30,局部变量
  7. System.out.println(this.num); // 20,本类的成员变量
  8. System.out.println(super.num); // 10,父类的成员变量
  9. }
  10. }
  1. package cn.itcast.day09.demo03;
  2. public class Fu {
  3. int num = 10;
  4. }

5、继承中成员方法的访问特点

父子类方法重名

  1. package cn.itcast.day09.demo04;
  2. /*
  3. 在父子类的继承关系当中,创建子类对象,访问成员方法的规则:
  4. 创建的对象是谁,就优先用谁,如果没有则向上找。
  5. 注意事项:
  6. 无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。
  7. 重写(Override)
  8. 概念:在继承关系当中,方法的名称一样,参数列表也一样。
  9. 重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写。
  10. 重载(Overload):方法的名称一样,参数列表【不一样】。
  11. 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。
  12. */
  13. public class Demo01ExtendsMethod {
  14. public static void main(String[] args) {
  15. Zi zi = new Zi();
  16. zi.methodFu();
  17. zi.methodZi();
  18. // 创建的是new了子类对象,所以优先用子类方法
  19. zi.method();
  20. }
  21. }
  1. package cn.itcast.day09.demo04;
  2. public class Fu {
  3. public void methodFu() {
  4. System.out.println("父类方法执行!");
  5. }
  6. public void method() {
  7. System.out.println("父类重名方法执行!");
  8. }
  9. }
  1. package cn.itcast.day09.demo04;
  2. public class Zi extends Fu {
  3. public void methodZi() {
  4. System.out.println("子类方法执行!");
  5. }
  6. public void method() {
  7. System.out.println("子类重名方法执行!");
  8. }
  9. }

6、继承中方法的覆盖

7、继承中方法的覆盖的注意事项

  1. @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。

  1. package cn.itcast.day09.demo05;
  2. /*
  3. 方法覆盖重写的注意事项:
  4. 1. 必须保证父子类之间方法的名称相同,参数列表也相同。
  5. @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。
  6. 这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
  7. 2. 子类方法的返回值必须【小于等于】父类方法的返回值范围。
  8. 小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的子类。
  9. 3. 子类方法的权限必须【大于等于】父类方法的权限修饰符。
  10. 小扩展提示:public > protected > (default) > private
  11. 备注:(default)不是关键字default,而是什么都不写,留空。
  12. */
  13. public class Demo01Override {
  14. }
  1. package cn.itcast.day09.demo05;
  2. public class Fu {
  3. public String method() {
  4. return null;
  5. }
  6. }
  1. package cn.itcast.day09.demo05;
  2. public class Zi extends Fu {
  3. @Override
  4. public String method() {
  5. return null;
  6. }
  7. }

8、覆盖重写的应用场景

  1. package cn.itcast.day09.demo06;
  2. // 定义一个新手机,使用老手机作为父类
  3. public class NewPhone extends Phone {
  4. @Override
  5. public void show() {
  6. super.show(); // 把父类的show方法拿过来重复利用
  7. // 自己子类再来添加更多内容
  8. System.out.println("显示姓名");
  9. System.out.println("显示头像");
  10. }
  11. }
  1. package cn.itcast.day09.demo06;
  2. // 本来的老款手机
  3. public class Phone {
  4. public void call() {
  5. System.out.println("打电话");
  6. }
  7. public void send() {
  8. System.out.println("发短信");
  9. }
  10. public void show() {
  11. System.out.println("显示号码");
  12. }
  13. }
  1. package cn.itcast.day09.demo06;
  2. public class Demo01Phone {
  3. public static void main(String[] args) {
  4. Phone phone = new Phone();
  5. phone.call();
  6. phone.send();
  7. phone.show();
  8. System.out.println("==========");
  9. NewPhone newPhone = new NewPhone();
  10. newPhone.call();
  11. newPhone.send();
  12. newPhone.show();
  13. }
  14. }

9、继承中构造方法的访问特点

  1. package cn.itcast.day09.demo07;
  2. /*
  3. 继承关系中,父子类构造方法的访问特点:
  4. 1. 子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
  5. 2. 子类构造可以通过super关键字来调用父类重载构造。
  6. 3. super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。
  7. 总结:
  8. 子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。
  9. */
  10. public class Demo01Constructor {
  11. public static void main(String[] args) {
  12. Zi zi = new Zi();
  13. }
  14. }
  1. package cn.itcast.day09.demo07;
  2. public class Fu {
  3. public Fu() {
  4. System.out.println("父类无参构造");
  5. }
  6. public Fu(int num) {
  7. System.out.println("父类有参构造!");
  8. }
  9. }
  1. package cn.itcast.day09.demo07;
  2. public class Zi extends Fu {
  3. public Zi() {
  4. super(); // 在调用父类无参构造方法
  5. // super(20); // 在调用父类重载的构造方法
  6. System.out.println("子类构造方法!");
  7. }
  8. public void method() {
  9. // super(); // 错误写法!只有子类构造方法,才能调用父类构造方法。
  10. }
  11. }

10、super关键字的三种用法

  1. package cn.itcast.day09.demo08;
  2. /*
  3. super关键字的用法有三种:
  4. 1. 在子类的成员方法中,访问父类的成员变量。
  5. 2. 在子类的成员方法中,访问父类的成员方法。
  6. 3. 在子类的构造方法中,访问父类的构造方法。
  7. */
  8. public class Zi extends Fu {
  9. int num = 20;
  10. public Zi() {
  11. super();
  12. }
  13. public void methodZi() {
  14. System.out.println(super.num); // 父类中的num
  15. }
  16. public void method() {
  17. super.method(); // 访问父类中的method
  18. System.out.println("子类方法");
  19. }
  20. }
  1. package cn.itcast.day09.demo08;
  2. public class Fu {
  3. int num = 10;
  4. public void method() {
  5. System.out.println("父类方法");
  6. }
  7. }

11、this关键字的三种用法

  1. package cn.itcast.day09.demo09;
  2. /*
  3. super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:
  4. 1. 在本类的成员方法中,访问本类的成员变量。
  5. 2. 在本类的成员方法中,访问本类的另一个成员方法。
  6. 3. 在本类的构造方法中,访问本类的另一个构造方法。
  7. 在第三种用法当中要注意:
  8. A. this(...)调用也必须是构造方法的第一个语句,唯一一个。
  9. B. super和this两种构造调用,不能同时使用。
  10. */
  11. public class Zi extends Fu {
  12. int num = 20;
  13. public Zi() {
  14. // super(); // 这一行不再赠送
  15. this(123); // 本类的无参构造,调用本类的有参构造
  16. // this(1, 2); // 错误写法!
  17. }
  18. public Zi(int n) {
  19. this(1, 2);
  20. }
  21. public Zi(int n, int m) {
  22. }
  23. public void showNum() {
  24. int num = 10;
  25. System.out.println(num); // 局部变量
  26. System.out.println(this.num); // 本类中的成员变量
  27. System.out.println(super.num); // 父类中的成员变量
  28. }
  29. public void methodA() {
  30. System.out.println("AAA");
  31. }
  32. public void methodB() {
  33. this.methodA();
  34. System.out.println("BBB");
  35. }
  36. }
  1. package cn.itcast.day09.demo09;
  2. public class Fu {
  3. int num = 30;
  4. }

12、super和this关键字图解

  1. package cn.itcast.day09.demo10;
  2. public class Demo {
  3. public static void main(String[] args) {
  4. Zi zi = new Zi();
  5. zi.show();
  6. zi.method();
  7. }
  8. }
  1. package cn.itcast.day09.demo10;
  2. public class Fu {
  3. int num = 10;
  4. public void method() {
  5. System.out.println("父类方法");
  6. }
  7. }
  1. package cn.itcast.day09.demo10;
  2. public class Zi extends Fu {
  3. int num = 20;
  4. @Override
  5. public void method() {
  6. super.method(); // 调用了父类方法
  7. System.out.println("子类方法");
  8. }
  9. public void show() {
  10. int num = 30;
  11. System.out.println(num); // 30
  12. System.out.println(this.num); // 20
  13. System.out.println(super.num); // 10
  14. }
  15. }

局部变量在栈中,成员变量在堆中

13、Java继承的三个特点

Java语言是单继承的

一个类的继承父类只有唯一的一个

A是B的父类、B是C的父类

A是C的父类

14、抽象的概念

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有 意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。

15、抽象方法和抽象类的格式

abstract

16、抽象类和抽象方法的使用

  1. package cn.itcast.day09.demo11;
  2. /*
  3. 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。
  4. 抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。
  5. 如何使用抽象类和抽象方法:
  6. 1. 不能直接创建new抽象类对象。
  7. 2. 必须用一个子类来继承抽象父类。
  8. 3. 子类必须覆盖重写抽象父类当中所有的抽象方法。
  9. 覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
  10. 4. 创建子类对象进行使用。
  11. */
  12. public abstract class Animal {
  13. // 这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。
  14. public abstract void eat();
  15. // 这是普通的成员方法
  16. // public void normalMethod() {
  17. //
  18. // }
  19. }
  1. package cn.itcast.day09.demo11;
  2. public class Cat extends Animal {
  3. @Override
  4. public void eat() {
  5. System.out.println("猫吃鱼");
  6. }
  7. }
  1. package cn.itcast.day09.demo11;
  2. public class DemoMain {
  3. public static void main(String[] args) {
  4. // Animal animal = new Animal(); // 错误写法!不能直接创建抽象类对象
  5. Cat cat = new Cat();
  6. cat.eat();
  7. }
  8. }

17、抽象方法和抽象类的注意事项

  1. package cn.itcast.day09.demo13;
  2. // 最高的抽象父类
  3. public abstract class Animal {
  4. public abstract void eat();
  5. public abstract void sleep();
  6. }
  1. package cn.itcast.day09.demo13;
  2. // 子类也是一个抽象类
  3. public abstract class Dog extends Animal {
  4. @Override
  5. public void eat() {
  6. System.out.println("狗吃骨头");
  7. }
  8. // public abstract void sleep();
  9. }
  1. package cn.itcast.day09.demo13;
  2. public class DogGolden extends Dog {
  3. @Override
  4. public void sleep() {
  5. System.out.println("呼呼呼……");
  6. }
  7. }
  1. package cn.itcast.day09.demo13;
  2. public class Dog2Ha extends Dog {
  3. @Override
  4. public void sleep() {
  5. System.out.println("嘿嘿嘿……");
  6. }
  7. }
  1. ackage cn.itcast.day09.demo13;
  2. public class DemoMain {
  3. public static void main(String[] args) {
  4. // Animal animal = new Animal(); // 错误!
  5. // Dog dog = new Dog(); // 错误,这也是抽象类
  6. Dog2Ha ha = new Dog2Ha(); // 这是普通类,可以直接new对象。
  7. ha.eat();
  8. ha.sleep();
  9. System.out.println("==========");
  10. DogGolden golden = new DogGolden();
  11. golden.eat();
  12. golden.sleep();
  13. }
  14. }

18、发红包案例

继承的综合案例

群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:

1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。

2. 成员领取红包后,保存到成员余额中。

请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。

19、发红包案例的实现

  1. package cn.itcast.day09.demo14;
  2. import java.util.ArrayList;
  3. public class MainRedPacket {
  4. public static void main(String[] args) {
  5. Manager manager = new Manager("群主", 100);
  6. Member one = new Member("成员A", 0);
  7. Member two = new Member("成员B", 0);
  8. Member three = new Member("成员C", 0);
  9. manager.show(); // 100
  10. one.show(); // 0
  11. two.show(); // 0
  12. three.show(); // 0
  13. System.out.println("===============");
  14. // 群主总共发20块钱,分成3个红包
  15. ArrayList<Integer> redList = manager.send(20, 3);
  16. // 三个普通成员收红包
  17. one.receive(redList);
  18. two.receive(redList);
  19. three.receive(redList);
  20. manager.show(); // 100-20=80
  21. // 6、6、8,随机分给三个人
  22. one.show();
  23. two.show();
  24. three.show();
  25. }
  26. }
  1. package cn.itcast.day09.demo14;
  2. import java.util.ArrayList;
  3. // 群主的类
  4. public class Manager extends User {
  5. public Manager() {
  6. }
  7. public Manager(String name, int money) {
  8. super(name, money);
  9. }
  10. public ArrayList<Integer> send(int totalMoney, int count) {
  11. // 首先需要一个集合,用来存储若干个红包的金额
  12. ArrayList<Integer> redList = new ArrayList<>();
  13. // 首先看一下群主自己有多少钱
  14. int leftMoney = super.getMoney(); // 群主当前余额
  15. if (totalMoney > leftMoney) {
  16. System.out.println("余额不足");
  17. return redList; // 返回空集合
  18. }
  19. // 扣钱,其实就是重新设置余额
  20. super.setMoney(leftMoney - totalMoney);
  21. // 发红包需要平均拆分成为count份
  22. int avg = totalMoney / count;
  23. int mod = totalMoney % count; // 余数,也就是甩下的零头
  24. // 除不开的零头,包在最后一个红包当中
  25. // 下面把红包一个一个放到集合当中
  26. for (int i = 0; i < count - 1; i++) {
  27. redList.add(avg);
  28. }
  29. // 最后一个红包
  30. int last = avg + mod;
  31. redList.add(last);
  32. return redList;
  33. }
  34. }
  1. package cn.itcast.day09.demo14;
  2. import java.util.ArrayList;
  3. import java.util.Random;
  4. // 普通成员
  5. public class Member extends User {
  6. public Member() {
  7. }
  8. public Member(String name, int money) {
  9. super(name, money);
  10. }
  11. public void receive(ArrayList<Integer> list) {
  12. // 从多个红包当中随便抽取一个,给我自己。
  13. // 随机获取一个集合当中的索引编号
  14. int index = new Random().nextInt(list.size());
  15. // 根据索引,从集合当中删除,并且得到被删除的红包,给我自己
  16. int delta = list.remove(index);
  17. // 当前成员自己本来有多少钱:
  18. int money = super.getMoney();
  19. // 加法,并且重新设置回去
  20. super.setMoney(money + delta);
  21. }
  22. }
  1. package cn.itcast.day09.demo14;
  2. public class User {
  3. private String name; // 姓名
  4. private int money; // 余额,也就是当前用户拥有的钱数
  5. public User() {
  6. }
  7. public User(String name, int money) {
  8. this.name = name;
  9. this.money = money;
  10. }
  11. // 展示一下当前用户有多少钱
  12. public void show() {
  13. System.out.println("我叫:" + name + ",我有多少钱:" + money);
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getMoney() {
  22. return money;
  23. }
  24. public void setMoney(int money) {
  25. this.money = money;
  26. }
  27. }

Java(152-170)【继承、super、this、抽象类】的更多相关文章

  1. java三大特性--继承

    定义: 继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,使得子类具有父类相同的行为. 继承的好处: 有效实现代码复用,避免重复代码的出现. 让类与类之间产生了关系,是多态的前提. ...

  2. Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...

  3. java类的继承,多态,抽象类与接口

    知识点梳理:     1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用 ...

  4. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

  5. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  6. Java 面向对象之继承和重写OverWrite,重写和重载的区别,抽象类

    01继承的概述 A:继承的概念 a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作 ...

  7. JAVA 继承基本类、抽象类、接口

    Java是一个面向对象的语言,java面向对象一般有三大特征:封装.继承.多态. 封装:就是把一些属性和方法封装到一个类里. 继承:就如子类继承父类的一些属性和方法. 多态:就如一个父类有多个不同特色 ...

  8. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  9. java 之 继承 super关键籽 this关键字 final关键字

    继承 语法: 使用 extends 来继承 class子类    extends父类{ 子类属性 子类方法 } 继承的特点: 1.子类会把父类所有的属性和方法继承下来,final修饰的类是不可以被继承 ...

  10. Java复习总结——继承

    访问权限 Java中有三个访问权限修饰符:private.protected以及public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段以及方法)加上访问修饰符. 类可见表示其他类 ...

随机推荐

  1. HttpDns 原理是什么

    本文转载自HttpDns 原理是什么 什么是 DNS DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址.能够使用户更方便的访问互联网,而不 ...

  2. 【HTB靶场系列】靶机Carrier的渗透测试

    出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...

  3. vue学习遇到的问题

    1.vue脚手架的安装,解决链接:https://www.cnblogs.com/qcq0703/p/14439467.html2.2.2.0+ 的版本里,当在组件上使用 v-for 时,key 现在 ...

  4. 后端程序员之路 2、nginx、php

    nginx是由俄罗斯人开发的一种实现web服务器的工具,主要是为俄罗斯的第三大门户网站实现反向代理加速的服务器. Linux(CentOS)下,下载安装Nginx并配置 - jtlgb - 博客园ht ...

  5. Pyqt5实现model/View,解决tableView出现空白行问题。

    项目中表格需要显示5万条数据以上,并且实时刷新.开始使用的tableWidget,数据量一大显得力不从心,所以使用Qt的Model/View来重新实现.下面是更改之前编写的小Demo. import ...

  6. 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组

    剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...

  7. 微软跨平台UI框架MAUI真的要来啦

    .NET 6 preview已经上线,是时候为在BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做准备了.对于客户端应用程序开发人员来说,这一年.NET有 ...

  8. 攻防世界 reverse Guess-the-Number

    Guess-the-Number  su-ctf-quals-2014 使用jd-gui 反编译jar import java.math.BigInteger; public class guess ...

  9. PTA 输出数组元素

    7-3 输出数组元素 (15 分)   本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果. 输入格式: 输入的第一行给出正整数n(1).随后一行给出n个整 ...

  10. Android Studio 待看博文

    •前言 学习过程中找到的一些好的博文,有些可能当时就看完了并解决了我的问题,有些可能需要好几天的事件才能消化. 特此记录,方便查阅. •CSDN 给新人的一些基础常识 TextView的文字长度测量及 ...