java基础篇
IDEA常用快捷键
快捷键功能
Alt+Enter自动修正代码Ctrl+Y删除光标所在行Ctrl+D复制光标所在行的内容,插入光标位置下面Ctrl+Alt +L格式化代码Ctrl+/单行注释,再按取消注释Ctrl+Shift+/选中代码注释,多行注释,再按取消注释。Alt+Ins自动生成代码,toString,get,set等方法Alt+Shift+上下箭头移动当前代码行
继承的概述
继承的格式
创建对象
package Extends
;
public class Demo01Extends {
public static void main(String
[] args
) {
Teacher teacher
= new Teacher();
teacher
.method();
Assistant assistant
= new Assistant();
assistant
.method();
}
}
定义一个父类:员工
package Extends
;
public class Employee {
public void method() {
System
.out
.println("方法执行");
}
}
定义子类:讲师
package Extends
;
public class Teacher extends Employee{
}
定义子类:助教
package Extends
;
public class Assistant extends Employee {
}
继承中成员变量的访问特点
package Extends
.Demo01
;
public class Demo01ExtendsField {
public static void main(String
[] args
) {
Fu fu
= new Fu();
System
.out
.println(fu
.numFu
);
Zi zi
= new Zi();
System
.out
.println(zi
.numZi
);
System
.out
.println(zi
.numFu
);
System
.out
.println("=============");
System
.out
.println(zi
.num
);
System
.out
.println("=============");
zi
.methodZi();
zi
.methodFu();
}
}
父类
package Extends
.Demo01
;
public class Fu {
int numFu
= 20;
int num
= 200;
public void methodFu() {
System
.out
.println(num
);
}
}
子类
package Extends
.Demo01
;
public class Zi extends Fu{
int numZi
= 10;
int num
= 100;
public void methodZi() {
System
.out
.println(num
);
}
}
区分子类方法中重名的三种变量
package Extends
.Demo02
;
public class Demo01ExtendsField {
public static void main(String
[] args
) {
Zi zi
= new Zi();
zi
.method();
}
}
父类
package Extends
.Demo02
;
public class Fu {
int num
= 20;
}
子类
package Extends
.Demo02
;
public class Zi extends Fu{
int num
= 10;
public void method() {
int num
= 30;
System
.out
.println(num
);
System
.out
.println(this.num
);
System
.out
.println(super.num
);
}
}
继承中成员方法的访问特点
package Extends
.Demo03
;
public class Demo01ExtendsMethod {
public static void main(String
[] args
) {
Zi zi
= new Zi();
zi
.methodFu();
zi
.methodZi();
zi
.method();
}
}
父类
package Extends
.Demo03
;
public class Fu {
public void methodFu(){
System
.out
.println("父类方法执行");
}
public void method(){
System
.out
.println("父类重名方法执行");
}
}
子类
package Extends
.Demo03
;
public class Zi extends Fu{
public void methodZi(){
System
.out
.println("子类方法执行");
}
public void method(){
System
.out
.println("子类重名方法执行");
}
}
继承中方法的覆盖重写:概念与特点
package Extends
.Demo03
;
public class Demo01ExtendsMethod {
public static void main(String
[] args
) {
Zi zi
= new Zi();
zi
.methodFu();
zi
.methodZi();
zi
.method();
}
}
父类
package Extends
.Demo03
;
public class Fu {
public void methodFu(){
System
.out
.println("父类方法执行");
}
public void method(){
System
.out
.println("父类重名方法执行");
}
}
子类
package Extends
.Demo03
;
public class Zi extends Fu{
public void methodZi(){
System
.out
.println("子类方法执行");
}
public void method(){
System
.out
.println("子类重名方法执行");
}
}
继承中方法的覆盖重写:注意事项
package Extends
.Demo04
;
public class Demo04Override {
public static void main(String
[] args
) {
}
}
父类
package Extends
.Demo04
;
public class Fu {
public Object
method() {
return null
;
}
}
子类
package Extends
.Demo04
;
public class Zi extends Fu{
@Override
public Object
method() {
return null
;
}
}
继承中方法的覆盖重写:应用场景
package Extends
.Demo05
;
public class Demo01Phone {
public static void main(String
[] args
) {
Phone phone
= new Phone();
phone
.call();
phone
.send();
phone
.show();
System
.out
.println("==========");
newPhone newPhone
= new newPhone();
newPhone
.call();
newPhone
.send();
newPhone
.show();
}
}
父类
package Extends
.Demo05
;
public class Phone {
public void call() {
System
.out
.println("打电话");
}
public void send() {
System
.out
.println("发短信");
}
public void show() {
System
.out
.println("显示号码");
}
}
子类
package Extends
.Demo05
;
public class newPhone extends Phone{
@Override
public void show(){
super.show();
System
.out
.println("显示姓名");
System
.out
.println("显示头像");
}
}
继承中构造方法的访问特点
package Extends
.Demo06
;
public class Demo06Constructor {
public static void main(String
[] args
) {
Zi zi
= new Zi();
}
}
父类
package Extends
.Demo06
;
public class Fu {
public Fu(int num
){
System
.out
.println("父类有参构造方法");
}
public Fu(){
System
.out
.println("父类无参构造方法");
}
}
子类
package Extends
.Demo06
;
public class Zi extends Fu{
public Zi(){
super(20);
System
.out
.println("子类构造方法");
}
}
super关键字的三种用法
package Extends
.Demo07
;
public class Demo07Super {
public static void main(String
[] args
) {
Zi zi
= new Zi();
zi
.method();
zi
.methodZi();
}
}
父类
package Extends
.Demo07
;
public class Fu {
int num
= 30;
public void method() {
System
.out
.println("父类方法");
}
}
子类
package Extends
.Demo07
;
public class Zi extends Fu{
int num
= 20;
public Zi() {
super();
}
public void methodZi() {
System
.out
.println(num
);
System
.out
.println(super.num
);
}
public void method() {
super.method();
System
.out
.println("子类方法");
}
}
this关键字的三种用法
package Extends
.Demo08
;
public class Fu {
int num
= 30;
}
package Extends
.Demo08
;
public class Zi extends Fu{
int num
= 20;
public Zi() {
this(123);
}
public Zi(int n
) {
this(1,2);
}
public Zi(int n
,int m
) {
}
public void showNum() {
int num
= 10;
System
.out
.println(num
);
System
.out
.println(this.num
);
System
.out
.println(super.num
);
}
public void methodA() {
System
.out
.println("AAA");
}
public void methodB() {
this.methodA();
System
.out
.println("BBB");
}
}
super与this关键字图解
Java继承的三个特点
抽象的概念:
抽象方法和抽象类的格式
package Extends
.Demo10
;
public abstract class Animal {
public abstract void eat();
public void normalMethod() {
}
}
抽象方法和抽象类的使用
package Extends
.Demo10
;
public class Demo01Main {
public static void main(String
[] args
) {
Cat cat
= new Cat();
cat
.eat();
}
}
父类
package Extends
.Demo10
;
public abstract class Animal {
public abstract void eat();
public void normalMethod() {
}
}
子类
package Extends
.Demo10
;
public class Cat extends Animal{
@Override
public void eat() {
System
.out
.println("猫吃鱼");
};
}
抽象方法和抽象类的注意事项:
关于抽象类的使用,以下为语法上要注意的细节
抽象类【不能创建对象】。如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法
package Extends
.Demo11
;
public class DemoMain {
public static void main(String
[] args
) {
Zi zi
= new Zi();
zi
.eat();
}
}
父类
package Extends
.Demo11
;
public abstract class Fu {
public Fu() {
System
.out
.println("抽象父类构造方法执行");
}
public abstract void eat();
}
子类
package Extends
.Demo11
;
public class Zi extends Fu{
public Zi() {
System
.out
.println("子类构造方法执行");
}
@Override
public void eat() {
System
.out
.println("吃饭饭");
}
}
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
【抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可】
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
package Extends
.Demo11
;
public abstract class MyAbstract {
}
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
发红包案例-分析
发红包案例-实现
package SendMoney
;
import java
.util
.ArrayList
;
public class MainPacket {
public static void main(String
[] args
) {
Manager manager
= new Manager("群主",100);
Member one
= new Member("成员A",0);
Member two
= new Member("成员B",0);
Member three
= new Member("成员B",0);
manager
.show();
one
.show();
two
.show();
three
.show();
System
.out
.println("============");
ArrayList
<Integer> redList
= manager
.send(20,3);
one
.receive(redList
);
two
.receive(redList
);
three
.receive(redList
);
manager
.show();
one
.show();
two
.show();
three
.show();
}
}
群主
package SendMoney
;
import java
.util
.ArrayList
;
public class Manager extends User{
public Manager() {
}
public Manager(String name
, int money
) {
super(name
, money
);
}
public ArrayList
<Integer> send(int totalMoney
,int count
) {
ArrayList
<Integer> redList
= new ArrayList();
int leftMoney
= super.getMoney();
if(totalMoney
> leftMoney
) {
System
.out
.println("余额不足");
return redList
;
}
super.setMoney(leftMoney
- totalMoney
);
int avg
= totalMoney
/ count
;
int mod
= totalMoney
% count
;
for (int i
= 0; i
< count
; i
++) {
redList
.add(avg
);
}
int last
= avg
+ mod
;
redList
.add(last
);
return redList
;
}
}
用户类
package SendMoney
;
public class User {
private String name
;
private int money
;
public User() {
}
public User(String name
, int money
) {
this.name
= name
;
this.money
= money
;
}
public void show() {
System
.out
.println("我叫:" + name
+ ",我有多少钱:" + money
);
}
public String
getName() {
return name
;
}
public void setName(String name
) {
this.name
= name
;
}
public int getMoney() {
return money
;
}
public void setMoney(int money
) {
this.money
= money
;
}
}
成员
package SendMoney
;
import java
.util
.ArrayList
;
import java
.util
.Random
;
public class Member extends User{
public Member() {
}
public Member(String name
,int money
) {
super(name
, money
);
}
public void receive(ArrayList
<Integer> list
) {
int index
= new Random().nextInt(list
.size());
Integer delta
= list
.remove(index
);
int money
= super.getMoney();
super.setMoney(money
+ delta
);
}
}