---
title: "Statiska metoder i subklasser"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/168776-statiska-metoder-i-subklasser"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "M@rtin"
published: "2008-02-06T13:41:54.000Z"
updated: "2008-02-06T20:26:11.000Z"
replies: 4
views: 558
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/168776-statiska-metoder-i-subklasser"
---

# Statiska metoder i subklasser

## #1 — M@rtin, 2008-02-06T13:41Z

Varför kan man inte ha statiska metoder i subklasser i java? Jag vet att det inte går men jag förstår inte riktigt varför de infört den begränsningen. Nån som har någon bra teori?

Permalänk: https://www.webforum.nu/p/168776

## #2 — spango, 2008-02-06T14:39Z

Hur menar du "inte går"? Anrop av statiska metoder använder inte dynamisk bindning men det är en annan sak.

Permalänk: https://www.webforum.nu/p/2077926

## #3 — M@rtin, 2008-02-06T15:30Z

Inre klasser kanske är ordet, inte subklasser, men jag antar att det är samma sak.

Jag menar att följande är helt ok:

```
class Statictest {

	public static void main(String args[]){
		System.out.println(Klassen.test());	
	}
	

	
}

class Klassen {

	public Klassen(){
	}

	public static int test(){
		return 3;
	}
	
}
```

Men att detta inte går:

```
class Statictest {

	public static void main(String args[]){
		System.out.println(Klassen.test());	
	}
	
	class Klassen {
	
		public Klassen(){
		}
	
		public static int test(){
			return 3;
		}
		
	}
	
}
```

Permalänk: https://www.webforum.nu/p/2077945

## #4 — Lime, 2008-02-06T18:12Z

Det hela hänger ihop med att en inre klass behandlas som i princip vilket attribut som helst. Alltså finns inte den inre klassen innan det finns ett objekt av den yttre.

Man är frestad att göra såhär:

```
class Statictest {
	
	public Statictest() {
	}
	public static void main(String args[]){
		Statictest.Klassen k1 = new Statictest.Klassen();
			
	}
	
	class Klassen {
	
		public Klassen(){
		}
	
		public int test(){
			return 3;
		}
		
	}	
}
```

 

men det går inte. Däremot är det här tillåtet:

```
lass Statictest {
	
	public Statictest() {
	}
	public static void main(String args[]){
		Statictest st = new Statictest();	
		Statictest.Klassen k1 = st.new Klassen();		
		System.out.println(k1.test());		
	}
	
	class Klassen {
	
		public Klassen(){
		}
	
		public int test(){
			return 3;
		}
		
	}	
}
```

Sedan går det givetvis att göra den intre klassen till statiks också och då kan man anropa den direkt, eftersom det går utmärkt att ropa från ett statiskt scope till ett annat, såhär:

```
class Statictest {
	
	public Statictest() {
	}
	public static void main(String args[]){
			
		System.out.println(Statictest.Klassen.test());		
	}
	
	static class Klassen {
	
		public Klassen(){
		}
	
		static public int test(){
			return 3;
		}		
	}	
}
```

Jag gör ibland private eller protected inner classes när jag har metoder som jag inte vet om hör hemma i klassen eller inte, eller vid refaktureringar.

Sått sånt här:

```
class Statictest {

	public Statictest() {
		System.out.println(StaticUtil.test());
	}

	// Private inner class
	private static class StaticUtil {

		static public int test() {
			return 3;
		}
	}
}

public class StatSub extends Statictest {
	
	public StatSub() {
		super();
		System.out.println("Statictest.StaticUtil är inte tillgänglig här nere...");
	}
	
	public static void main(String[] args) {
		new StatSub();
		
	}

}
```

Blir konceptet klarare??

Static kan bara anropa static.
private bara i klassen själv, inte ens i sub-klasser.
Inre klasser beteer sig lite som ett attribut.

Permalänk: https://www.webforum.nu/p/2077980

## #5 — M@rtin, 2008-02-06T20:26Z

Mycket bra och uttömmande svar! Tack så mycket :)

Permalänk: https://www.webforum.nu/p/2078072

---

Tråden på webben: https://www.webforum.nu/amne/java/168776-statiska-metoder-i-subklasser
