대입연산자는 좌항 우항의 타입이 같아야한다.
/* =(대입연산자)는 오른쪽에 있는 값을 왼쪽에 저장하는데, 타입이 같거나 변환이 가능해야한다.
* 예1) String str = "1";
* int num = str; (은 문자열 1을 int에 저장하려고 해서 오류)
*
* 예2) double dnum = 1; (은 정수 1이 자동타입변환이 되어서 실수double dnum에 저장될 수 있음)
* 예3) int num = (int) 1.0; (은 실수 1.0이 강제타입변환(앞에다가 타입을 강제로 씀)이 되어서 가능) */
initializeTest 초기화 (객체변수 초기화, 클래스변수 초기화 순서&종류)
public class initializeTest { //초기화순서
public static void main(String []args) {
TestA ta = new TestA();
System.out.println(ta.getNum());
System.out.println(TestA.getRes());
}
}
/* 객체 변수 초기화 순서 //생성자 초기화로 초기화하는게 코드다루기 편함
* 1. 변수 선언시 기본값으로 초기화
* - num는 0으로 초기화
* 2. 명시적 초기화
* - num는 1로 초기화
* 3. 초기화 블록
* - num= 3
* 4. 생성자 초기화
* - num는 2로 초기화
*
* -> 기본값이 아닌 값들은 생성자에서 초기화 하자, 그러면 항상 마지막이 생성자이기때문에 다른 초기화를 신경쓰지 않아도 돼(객체 변수에 한해서)
*
* 클래스 변수 //생성자초기화는 객체없이 쓸수가 없자넝 그래서 클래스 변수는 그게 없어서 3개, 명시적 초기화가 코드다루기 편함
* 1. 변수 선언시 기본값으로 초기화
* -res를 0으로 초기화
* 2. 명시적 초기화
* -res를 10으로 초기화
* 3. 초기화 블록
* */
class TestA{
private int num=1; //변수선언 및 초기화, 명시적 초기화
private static int res= 10;
{ // {} 중괄호를 열고 닫는 사이에 써주면 그게 초기화 블록임, 초기화 블록: 객체변수
num=3;
}
//초기화 블록 : 클래스 변수(static이 붙은거)
static {
res = 20;
}
public TestA() { //생성자를 통해 초기화
num=2;
}
public int getNum() {
return num;
}
public static int getRes() { //static -> class
return res;
}
}
조건문과 반목분의 실행문이 한 줄일 경우, {}중괄호를 생략해도 된다.
public class ForTest { //307p클래스까지 나간 진도임.
public static void main(String[] args) {
// 조건문과 반복문의 실행문이 1줄이면 생략 가능
for(int i=1; i<=5; i+=1) //{ 반복문의 중괄호하나를 지웠음에도 실행 잘 됨.
System.out.print(i+ " ");
//} //중괄호지우기위해 주석처리
int num=2;
if (num%2==0) //{
System.out.println("짝수"); //if문에 실행문이 한 줄이라서 중괄호 주석처리했는데도 실행 잘됨.
/*}*/else //{
System.out.println("홀수"); //else에 실행문이 한 줄이라서 중괄호 주석처리했는데도 실행 잘됨.
/*}*/
}
InheritanceTest1
public class InheritanceTest1 {
public static void main(String[] args) {
Parent p = new Parent(); //부모클래스의 객체 p를 만들었음
p.print();
Child c = new Child(); //자식클래스의 객체 c를 만듦
c.print(); //부모클래스의 내용을 물려받았기때문에 print가능함
}
}
class Parent{
public int num;
private int num2;
protected int num3;
int num4;
public void print() {
System.out.println("num : " + num);
}
}
class Child extends Parent{
public void print2() {
//System.out.println("num2 : " + num2); //num2는 private로 되어있어서 에러남
System.out.println("num3 : " + num3);
System.out.println("num4 : " + num4);
}
}
InheritanceTest2
public static void main(String[]args) {
SmartPhone sp = new SmartPhone("010-1234-5678", "퍼시픽블루", "아이폰12pro");
sp.print();
}
}
//폰 클래스
class Phone{
private String num; //같은 패키지에서 사용할 수 있도록 private말고 default로 하겠음
private String color;
private String model;
public Phone(String num, String color, String model) { //생성자를 만들엉씀
System.out.println("폰 생성자입니다.");
this.num = num;
this.color = color;
this.model = model;
}
public Phone() {
System.out.println("폰 기본 생성자입니다.");
}
public void print() {
System.out.println("번호 : " + num);
System.out.println("색상 : " + color);
System.out.println("모델 : " + model);
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
//스마트 폰 클래스
class SmartPhone extends Phone{
int camera; //카메라 화소(단위 만)
public SmartPhone(String num, String color, String model) {
//부모 클래스의 생성자가 없으면 super();가 생략되어 있음
super(num, color, model); //부모클래스 생성자 얘를 호출하고 밑에 this.set 3개를 모두 지웠음. 그럼num, color, model은 부모클래스서 바꾸는거임
//this(); //에러발생: 부모클래스의 생성자를 2번 호출하는 경우이기 때문 => SmartPhone(){}기본생성자에 super();가 생략되어있어서 결국 2번 초기화하라는 뜻이라서
//super를 쓰던지, this를 쓰던지 그래서 둘 중 하나를 써야 함.
System.out.println("스마트폰 생성자입니다.");
//this.setColor(color); //getter satter 쓴거임, Phone에서 private로 멤버변수 선언해서 =>주석처리(super쓰려고 일단 지워놨음)
//this.setModel(model);;
//this.setNum(num);;
}
public SmartPhone() {} //기본생성자
//super(); 가 생략되어있는것
}
변수 구별하기, Variable Test
import day11.Board;
public class VariableTest {
public static void main(String[] args) {
int num5=0; //일반변수, 지역변수
String str3 = "Hello"; //참조변수, 객체(클래스 String을 통해 만들어짐), 지역변수
int []arr = new int[5]; //참조변수, 배열, 지역변수
Board[] board = new Board[5]; //참조변수, 배열, 지역변수
}
}
class A{
int num1; //일반변수, 객체멤버변수
static int num2; //일반변수, 클래스멤버변수
String str1; //참조변수, 객체, 객체멤버변수
static String str2; //참조변수, 객체, 클래스멤버변수
public A(int num3, int num4) { // 일반변수, 매개변수
num1 = num3;
num2 = num4;
}
}
//모든 변수는 일반과 참조변수로 나뉜다. 값을 저장하면 일반, 주소를 저장하면 참조
//클래스 내에서 전체를 다 쓸 수 있으면 멤버변수, 일부 지역에서만 쓸 수 있으면 지역변수
//메소드에 전달하는 정보는 매개변수
//멤버변수는 1.클래스멤버변수 static 2.객체멤버변수 static(X)
//객체? 클래스를 통해만들어지는 것은 모두 객체, 배열은 그냥 배열
사각형, 원형 그리기